
Googleが開発した圧縮技術Brotliのデコーダーに、細工されたデータでメモリー破損を起こす脆弱性が見つかりました。条件によってはメモリー内容の漏洩や、認証なしでのリモートコード実行につながるおそれがあります。Node.jsのほか、複数のソフトウェアにも修正版が出ています。
Brotliのデコーダーでメモリー破損
脆弱性はCVE-2026-111497として識別され、Brotliのデコーダーにあるバッファーオーバーフローが原因です。デコーダーは圧縮データを元に戻します。細工されたストリームを処理すると、内部バッファーの範囲を超えてデータを書き込み、クラッシュやメモリー内容の漏洩、リモートコード実行を引き起こす可能性があります。
Node.jsのセキュリティ情報によると、デコーダーが不正なブロック切り替えを「入力待ち」として扱い、ストリーミング処理で内部バッファーに入力を追加し続けます。攻撃者が用意したBrotliデータをアプリケーションがNode.jsのnode:zlibで展開すると、プロセスメモリーが破損するおそれがあります。
BrotliはGoogleがファイルサイズの縮小を目的に開発した圧縮方式です。Webフォント形式WOFF2の圧縮にも使われ、その後、ほかのコンテンツにも利用できるよう汎用化されました。Brotliはgzipより高い圧縮率を持ち、HTMLやJavaScriptなどに頻出するパターンを含む辞書を備えています。
HTTP/2を使わない経路も対象
HTTP2Shellという通称でも、攻撃にHTTP/2プロトコルは必要ありません。問題になるのは、脆弱なデコーダーが細工されたBrotliデータを展開することです。圧縮ファイルなど、HTTP通信以外の入力を処理する場合も影響し得ます。
攻撃データは、Brotli圧縮されたリクエスト本文をサーバーやプロキシが展開する経路から届くことがあります。アプリケーションが外部サーバーから取得したレスポンスを自動展開する場合も、攻撃データを送り込まれる可能性があります。アップロードファイルなどを処理するデコーダーも対象になり得ます。
影響するソフトウェアはNode.jsだけではありません。Brotliを組み込むBun、Envoy Proxy、Istioのほか、curl/libcurl、Python、Javaのネイティブライブラリなども対象です。Electronのようなアプリには複数のBrotli実装が含まれることがあり、フォントデコーダーやデータファイルの読み込み処理にも使われています。
Node.jsや関連ソフトに修正版
Node.jsの修正版は、26系が26.12.1、24系が24.22.1、22系が22.23.4です。Bunは1.4.4、Google Brotliは1.2.1、1.1.1、1.0.10が修正版です。Envoy ProxyとIstioにも、それぞれ複数の系列向けの修正版が提供されています。
Envoy Proxyの修正版は1.40.0、1.39.3、1.38.6、1.37.8です。Istioでは1.31.2、1.30.6、1.29.9が挙げられていますが、1.29系列はサポート終了済みです。各ソフトウェアを、利用中の系列に合った修正版へ更新する必要があります。
脆弱なライブラリが組み込まれた実行ファイルやコンテナでは、依存関係を更新しても稼働中のプロセスが置き換わるとは限りません。OpenAIは、修正版への更新後にサービスやワーカーを再起動または再デプロイし、稼働中のバイナリーやイメージが修正版か確認するよう案内しています。
更新までBrotliの展開を止める
すぐに修正できない場合、OpenAIは信頼できない入力に対するBrotli展開を一時的に無効にする方法を案内しています。リクエスト本文では、プロキシやミドルウェアが展開する前にContent-Encoding: brを拒否します。外部サーバーから取得したレスポンスでは、HTTPクライアントが自動展開する前にBrotliを拒否します。
Accept-Encodingからbrを取り除くだけでは、相手サーバーがBrotli形式のレスポンスを送るのを防げない場合があります。クライアントがレスポンスを読み込んでからエンコーディングを調べても、すでに展開されている可能性があります。各デコード経路で、展開前にBrotliを止める必要があります。
Envoy ProxyやIstioでは、Brotli用の展開フィルターを無効化する方法があります。フィルターを外すと圧縮データが後段へ渡る場合があるため、後段のデコーダーも保護する必要があります。修正版への更新後は、各サービスを再起動または再デプロイし、稼働中の構成を確認します。










