CVE-2026-111497 は Google Brotli デコーダのバッファオーバーフローです。不正な Brotli 圧縮入力が内部バッファを越えて書き込むことがあります。攻撃者制御のデータを影響を受けるデコーダへ渡すアプリは暴露の可能性があります。圧縮 HTTP リクエスト本体、信頼できないサーバから取得したレスポンス、圧縮ファイルなどが含まれます。影響はクラッシュやメモリ漏洩からリモートコード実行まで。出方向の圧縮にだけ Brotli を使うこと自体は、このデコーダ欠陥への暴露を意味しません。

Node.js は 2026 年 10 月 21 日の 22.x/24.x/26.x セキュリティリリースで本問題を High と評価しました。無効な block switch が永久的な形式エラーではなく「一時的にもう少し入力が必要」と扱われ、ストリーミングデコーダが 8 バイトの内部バッファへバイトを足し続けた、とあります。アプリが `node:zlib` で攻撃者の Brotli を展開するとプロセスメモリを壊せます。Node.js アドバイザリは OpenAI Codex Security の Khai Tran と Sylvie Mayer の報告、および mcollina・aduh95 の修正に謝意を示しています。

修正バージョン(Patch the Planet 2026-10-23 時点)

プロジェクト修正バージョン
Node.js22.23.4、24.22.1、26.12.1(サポート中の系統を使用)
Bun1.4.4(Brotli 1.2.1 を含む)
Envoy1.40.0、1.39.3、1.38.6、1.37.8(1.36.12 も修正含むが 1.36 は非サポート)
Istio1.29.9、1.30.6、1.31.2(1.29 は EOL、サポート線へ移行を)
Google Brotli(上流)1.0.10、1.1.1、1.2.1(ライブラリの系統に合う修正版を)

上流 Brotli の 1.0.3〜1.2.0 が影響範囲です。埋め込みライブラリと静的バイナリも更新してください。Envoy のアドバイザリ(GHSA-3wvj-j6qm-62mr)は Brotli 展開フィルタを設定したデプロイが対象です。Chromium と Node を同梱する Electron 系、curl/libcurl や Python/Java バインディング、Brotli を読むファイル/フォント処理も確認してください。

暫定緩和

すぐ更新できない場合は、gzip/deflate などは残しつつ、信頼できないデータの Brotli 展開を止めます。

  • プロキシ・ミドルウェア・body parser が展開する前に、`Content-Encoding: br` のリクエストを拒否する。
  • HTTP クライアントでは自動 Brotli 展開を止め、展開前に Brotli レスポンスを拒否する。`Accept-Encoding` から `br` を外すだけでは、サーバが送ってくるのを止められない。
  • Envoy/Istio ではリクエスト・レスポンス双方の Brotli 展開フィルタを無効化。無効化後も圧縮バイトが下流の脆弱デコーダへ渡ることがある。
  • デコーダを直すまで、信頼できない Brotli ファイル処理を止める。

CDN やオリジンで Brotli *レスポンス圧縮*を切っても、リクエスト側やクライアント側の展開は止まりません。更新後は古いランタイムをピンしたイメージを再ビルド・再デプロイし、全レプリカとワーカーを再起動し、実行中バイナリをベンダー修正版と照合してください。

OpenAI の 10 月 23 日付・最先端モデル訓練環境の説明では、高計算のレッドチームが Patch the Planet 経由で開示した OSS 欠陥の一つとして本 Brotli 問題に触れています。訓練隔離の話は OpenAI が最先端モデル訓練環境の隔離を強化。Node.js 向けの別稿は Qoder が php2shell Defense と Node.js Vulnerability Scan スキルを追加。

各パッチビルドについて、私たちはまだ自前の環境で一つひとつ再テストしていません。暴露面やアップグレードの知見があれば、サイトフッターの連絡先からフィードバックをください。関連記事は OpenAI 訓練環境の隔離、Qoder Node.js 脆弱性スキャンスキル。