- 「HTTP2Shell」と名付けられたBrotli圧縮の重大な脆弱性により、メモリ破損やリモートコード実行が引き起こされる恐れ
- Node.js、Pythonパッケージ、.NETアプリケーションなど、広く使われているソフトウェアが影響を受ける
- 各ベンダーがパッチを公開。悪用の確認は報告されていないものの、管理者には直ちに更新するよう呼びかけ
複数のテック企業やプロジェクトが最近、「HTTP2Shell」と呼ばれる脆弱性に対するパッチを相次いで公開しました。この脆弱性は、先日明らかになった「PHP2Shell」の脆弱性と同様に、リモートコード実行(RCE)攻撃につながる恐れがあります。
HTTP2Shellが見つかったのは、Googleが開発したオープンソースのデータ圧縮アルゴリズム「Brotli」です。Brotliは情報を損なわずにファイルサイズを縮小するため、帯域幅を抑えながら高速な転送を実現します。
HTML、CSS、JavaScriptなどのHTTPレスポンスを圧縮するためにWebで広く使われているアルゴリズムで、ほとんどのWebブラウザ、サーバー、ソフトウェアライブラリが対応しています。
修正とパッチ
この不具合は境界外書き込みの脆弱性とされ、Node2ShellやBroccoli2Shellとも呼ばれています。CVE-2026-111497として追跡されており、深刻度スコアは9.2/10(クリティカル)です。米国国立脆弱性データベース(NVD)によると、この不具合はバッファオーバーフローを引き起こし、メモリの漏えいやサービス拒否(DoS)、場合によってはリモートコード実行にまでつながる恐れがあります。
Brotliはあらゆる種類のソフトウェアに組み込まれており、そのすべてがリスクにさらされています。影響を受けるのは、Node.js、brotlicffi、Requests、urllib3、httpx、aiohttpといったHTTPクライアントのほか、BunやEnvoyのデプロイメントなど、Brotliのデコーダーを使う他のアプリも含まれます。
Googleは2026年10月21日、Brotliのバージョン1.0.10、1.1.1、1.2.1を公開して、この不具合を修正しました。ただし、脆弱なバージョンのBrotliを同梱または使用しているソフトウェアは他にもあり、Googleのライブラリを更新するだけでは、すべてのアプリケーションを保護できない可能性があります。
先週末には、Microsoftが.NETの不具合に対処する緊急アップデートを公開しました。同社は、悪用に成功すると権限昇格につながる可能性があると説明しています。
Node.jsもBrodliデコーダーを同梱しているため、10月21日にパッチを公開しました。同プロジェクトは次のように説明しています。「無効なブロック切り替えが、恒久的なフォーマットエラーではなく、入力がさらに必要な一時的な状態として報告されていました。このため、ストリーミングデコーダーは8バイトの内部バッファに入力バイトを追加し続けていました。node:zlibで展開されるBrotliデータを攻撃者が送り込めれば、プロセスのメモリが破損し、クラッシュやプロセスメモリの漏えい、リモートコード実行につながる恐れがあります」
この脆弱性は、Node.js 26.x、24.x、22.xに影響するとされています。
BleepingComputerによると、修正を含むPyPIパッケージは2日後の10月23日に利用可能になりました。
パッチ適用済みバージョンの詳細は次のとおりです。
Google Brotli 1.0.10、1.1.1、1.2.1
Node.js 22.23.4、24.22.1、26.12.1
Python Brotli 1.2.1
Python brotlicffi 1.2.1.0
専用サイトも登場
同じ時期に、何者かが専用のWebサイトBroccoli2Shell.comを立ち上げました。このサイトでは問題の概要を説明し、脆弱なバージョンを追跡するとともに、実環境での悪用の試みを報告しています。サイトによると、この不具合に対する概念実証(PoC)のエクスプロイトはすでに存在していますが、悪意ある悪用が実環境で確認されたという報告はまだありません。
サイトには次のように書かれています。「2026-10-22にGitHub上で公開PoCが登場しました。意図的に弱体化させたビルドでのみコード実行に到達するとされています。標準ビルドでは、クラッシュと限定的なメモリ読み取りにとどまります」
システム管理者は、提供されたパッチをできるだけ早く適用し、影響を受けるプロセスを再起動したうえで、影響を受けるコンテナイメージを再ビルドして再デプロイすることが推奨されています。
すぐに対応できない場合は、リスクをある程度軽減できます。Pythonユーザーは、脆弱なBrotliとbrotlicffiのパッケージをアンインストールし、httpx[brotli]などのオプション依存関係も削除してください。
管理者は、プロキシ、ロードバランサー、Webアプリケーションファイアウォール(WAF)を設定し、Brotli圧縮されたボディを含む受信リクエストを拒否することもできます。ただし、この対策では、悪意あるHTTPレスポンスをダウンロードして展開するアプリは保護できない点に注意が必要です。
Node.jsには、完全な回避策はないとされています。