BrotliデコーダにRCE脆弱性、Node.jsとPythonに影響

原題: Broccoli2Shell: Brotli decoder RCE in Node.js, Python and more

なぜ重要か

BrotliはHTTP圧縮で広く使われており、Webサーバー・クライアント双方に潜在的な攻撃経路があるため、影響範囲が非常に大きい。

Brotli圧縮デコーダにバッファ外書き込みを引き起こす脆弱性「CVE-2026-111497」が発見された。CVSS 4.0スコア9.2(Critical)と評価され、Google Brotli C ライブラリ1.0.3〜1.2.0、Node.js 22/24/26系の特定バージョン、PythonのBrotliおよびbrotlicffiパッケージが影響を受ける。悪用されるとクラッシュ、メモリリーク、さらにはリモートコード実行(RCE)が起きうる。

Brotliデコーダの内部関数`DecodeBlockTypeAndLength()`が真偽値のみを返す設計だったため、「不正なストリーム」と「入力待ち」を呼び出し側が区別できなかった。高速パスでは戻り値が無視されており、攻撃者が細工したストリームを送り込むと、8バイトの内部バッファを超えて書き込みが発生。隣接するデコーダ状態が破壊され、メモリリークやコード実行へと至る可能性がある。

CWE-252(戻り値の未確認)とCWE-787(境界外書き込み)に分類される本脆弱性は、上流のgoogle/brotliコミット0ed4268ほか3件で修正された。修正版は`BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH`(−17)を返すことで不正ストリームを明示的に拒否する。

影響範囲は広い。Node.jsは独自にBrotliをバンドルしているため、OSのlibbrotliとは無関係に、Node.jsのバージョンだけが問題となる。Node.js 26系は26.12.1、24系は24.22.1、22系は22.23.4が修正済み。Node.js 25・23・20以前はEOL扱いで修正版が提供されない。

PythonではPyPIの`Brotli`および`brotlicffi`パッケージが同じCデコーダをコンパイルしており、1.2.1/1.2.1.0への更新が必要。コード上でimportしていなくても、`requests`/`urllib3`、`aiohttp`、`httpx[brotli]`、`Scrapy`などがインストール済みのBrotliを自動的に利用する点が落とし穴だ。

Expressとbody-parserは脆弱性の原因ではないが、Brotliデコーダへの経路となりうる。アップデートだけでは不十分で、実行中のプロセスの再起動とコンテナイメージの再ビルド・再デプロイが必要になる。開示時点では`pip-audit`・Dependabot・Safetyが必ずしも確実に検出できなかったとも報告されており、手動確認が推奨される。

出典

broccoli2shell.com — 元記事を読む →