Google製「Brotli」展開コードにメモリ破壊の脆弱性、Node.jsやBun、Pythonなど広範な環境に影響
要点
-
Googleが開発したデータ圧縮フォーマット「Brotli」の展開処理に、メモリ破壊を引き起こす脆弱性「CVE-2026-111497」が判明した。
-
細工された圧縮データによりバッファ終端を超えてメモリが破損し、クラッシュや情報漏洩、任意のコード実行を招く恐れがある。
-
Node.jsやBun、Envoy、Istio、PythonのBrotli関連パッケージなど、当該C言語コードを取り込んでいる多数のソフトウェアに影響が及んでいる。
-
実環境での悪用は確認されていないが、セキュリティ企業が特定のNode.js環境で任意のコード実行に成功したと発表している。
-
Googleが提供するデータ圧縮技術「Brotli」のデコーダ(圧縮データを復元するプログラム)において、深刻なメモリ破壊の脆弱性(CVE-2026-111497)が存在することが明らかになった。本脆弱性はOpenAIのセキュリティ研究チーム「Codex Security」によって報告され、2026年10月21日にGoogleおよびNode.jsが修正パッチを公開したのを皮切りに、関連する主要ソフトウェアで順次対応が進められている。
脆弱性のメカニズムと深刻度
「CVE-2026-111497」として追跡されているこの欠陥は、Brotli形式で圧縮されたデータストリームを展開する基本的なC言語コード内に存在する。悪意を持って細工された圧縮データを読み込ませると、割り当てられたバッファの終端を超えてデータが上書きされ、プログラムのメモリ空間が破壊される。これにより、プロセスの強制終了(クラッシュ)や意図しないメモリ情報の漏えい、さらには攻撃者が意図したコードの遠隔実行(RCE)につながる可能性があるという。
OpenAIのCodex Securityチームの説明によると、本脆弱性はサーバーとクライアントの双方向で影響を及ぼす。圧縮入力を受け付ける未修正のサーバーが悪意あるクライアントに乗っ取られるリスクがある一方、curl --compressed のように圧縮データを自動展開する未修正のクライアントも、悪意あるサーバーから返されたレスポンスを読み込むことで制御を奪われる恐れがある。
深刻度のスコア付けはベンダーによって分かれており、CVEを割り当てたGoogleは共通脆弱性評価システム「CVSS 4.0」で「緊急(Critical)」に相当する9.2と算定した。これに対し、Node.jsプロジェクトは深刻度を「高(High)」、Red Hatは8.1の「重要(Important)」と位置付けている。
影響を受けるソフトウェアと修正版
BrotliはWebトラフィックやページのデータ容量を軽量化する圧縮形式として広く普及している。今回の欠陥はBrotliの解凍処理を担う基本Cライブラリに含まれており、そのコードを取り込んで独自に配布している各種言語ランタイムやプロキシに波及した。各ソフトウェアが独自にコードを同梱している都合上、修正も製品ごとに個別のアップデートを適用する必要がある。
主な影響対象と修正バージョンは以下のとおりだ。
- Google Brotli(Cライブラリ): 1.0.3〜1.2.0が影響、1.0.10、1.1.1、1.2.1で修正
- Node.js: 22.x、24.x、26.x(修正前)およびサポート終了(EOL)となった20.x以前が影響、22.23.4、24.22.1、26.12.1で修正
- Bun: 1.4.3以前が影響、1.4.4で修正
- Envoy: 1.39.2、1.38.5、1.37.7、1.36.11が影響、1.40.0、1.39.3、1.38.6、1.37.8、1.36.12で修正
- Istio: 1.31.0〜1.31.1、1.30.0〜1.30.5、1.29.0〜1.29.8が影響、1.31.2、1.30.6、1.29.9で修正
- Python関連パッケージ:
Brotli(1.2.0以前→1.2.1で修正)、brotlicffi(1.2.0.x以前→1.2.1.0で修正) - cdxgen: スタンドアロンバイナリおよびイメージ(13.4.0および12.8.8以前→13.5.0、12.8.9で修正)
露出条件と利用環境ごとのリスク
本脆弱性に晒されるのは、外部の第三者が制御できるBrotliデータを展開する処理を実行した場合に限られる。
JavaScriptランタイムのNode.jsやBunでは、標準の fetch() で Content-Encoding: br 形式のレスポンスを受信した際や、Express 5 や body-parser 2 経由でBrotli圧縮されたリクエストボディを展開する際に問題のコードが実行される。なお、素のNode.jsによる標準的なHTTPサーバー実装単体ではリクエストボディを自動展開しないため直ちに露出することはない。Bunでは node:zlib を通じた処理も対象となる。EnvoyやIstioなどのプロキシ環境では、フィルター設定などでBrotli展開機能が有効化されている場合にのみ到達可能であり、無効であれば影響は受けない。cdxgenについては、信頼できない入力をスキャンするスタンドアロンバイナリやコンテナイメージ環境が対象となる。
特に注意が必要なのがPython環境だ。環境内に Brotli または brotlicffi パッケージがインストールされているだけで、requests や urllib3、httpx、aiohttp などの主要HTTPクライアントがBrotli応答を自動的に展開する挙動をとる。そのため、アプリケーション自身のコードで直接Brotliパッケージをインポートしていなくても、潜在的な攻撃対象になり得るという。
実証実験の現状と防御の注意点
現時点で、実際のサイバー攻撃(In-the-wild)における本脆弱性の悪用は報告されていない。米サイバーセキュリティ・社会基盤安全保障庁(CISA)が10月23日に行った評価では悪用・自動化ともに「なし(none / no)」と記録されており、Red Hatも現段階でリモートコード実行を安定して再現できる公開実証コード(PoC)は存在しないと言及している。
一方で、制御の奪取が可能であること自体は研究によって実証されている。サイバーセキュリティ企業Impervaのレッドチームは「Node2Shell」と名付けた検証において、ARM64版Linux上で稼働する未修正のNode.js 24.22.0を対象に、fetch応答およびExpressのリクエストボディ経由の双方から、任意のコードを実行させることに成功したと発表した。ただし、この攻撃成立には複数回の試行が必要であり、PoCは公開されておらず、他のプラットフォームやビルド環境での検証は行われていない。また、BunやPythonなど他のソフトウェア上でのコード実行実証は報告されていない。
なお、Webアプリケーションファイアウォール(WAF)による保護には一定の限界がある。情報公開当日に防御ルールを追加したVercelは、提供するルールについて「サーバーレス関数などが外部のサーバーからfetchによって取得するレスポンスまでは保護できない」と説明している。外部へのリクエスト処理を伴う経路を保護するためには、境界防御に頼るだけでなく、利用しているランタイムやライブラリ自体を修正済みバージョンへアップデートすることが不可欠となる。