Node.jsに組み込まれているCデコーダーライブラリ「Brotli」に、「HTTP2Shell」と呼ばれる重大な脆弱性が見つかりました。攻撃者によってメモリが破壊され、機密データにアクセスされるおそれがあります。
この脆弱性はCVE-2026-111497として追跡されており、「Broccoli2Shell」「Node2Shell」とも呼ばれています。影響を受けるのは、Brotliのバージョン1.0.3から1.0.9、1.1.0、1.2.0です。
複数の名称で報告されているのは、当初Node.jsで確認された後、Brotliデコーダーの同じ欠陥が複数のエコシステムのソフトウェアに影響しうることを研究者が突き止めたためです。
広範囲に及ぶ影響
HTTP2Shellという名称は、HTTPクライアントとサーバーへの影響を反映したものです。ただし、この脆弱性はHTTP/2に固有のものではなく、攻撃者が制御するBrotliデータを展開する他のアプリケーションにも影響する可能性があります。
Node.js以外に影響を受ける可能性があるのは、脆弱なBrotliデコーダーを使うよう構成された、urllib3[brotli]、requests、httpx、aiohttp[speedups]などのPython製HTTPクライアントです。脆弱なBrotli実装を利用するその他のアプリケーションやツールも対象となりえます。
日曜日、Microsoftはこの問題に対処するため、.NET向けの緊急セキュリティアップデートを公開しました。脆弱なバージョンの.NETを使用しているシステムでは、悪用に成功すると権限昇格が可能になると警告しています。
BrotliはGoogleが開発・保守しているオープンソースのプロジェクトで、可逆データ圧縮に用いられます。元のデータを損なうことなくファイルを縮小し、より高速に転送できるようにします。
Node2Shellはバッファオーバーフローの脆弱性です。細工したBrotli圧縮ストリームによって不正なブロック切り替えが発生しますが、デコーダーはこれを有効なものと扱い、さらなる入力を求める要求だと誤って解釈します。
デコーダーが内部の8バイトバッファに入力バイトを追加し続けるため、書き込みが境界を越え、近接するメモリが破壊されます。
Node.jsはセキュリティ勧告で次のように説明しています。「不正なブロック切り替えが、恒久的なフォーマットエラーではなく、入力が一時的に不足している状態として報告されました。そのためストリーミングデコーダーは、8バイトの内部バッファに入力バイトを追加し続けました」
攻撃者は、アプリケーションに悪意あるデータを展開させることでこの脆弱性を悪用できます。たとえば、URLを取得するアプリケーションに圧縮されたHTTPレスポンスを返す方法や、サーバーに圧縮されたリクエストを直接送りつける方法があります。
Node.jsによると、この脆弱性によってプロセスのクラッシュやメモリの漏えいが起こるほか、リモートコード実行(RCE)が可能になるおそれもあります。
サイバーセキュリティ企業のImpervaによる最近のレポートは、CVE-2026-111497(Node2Shell)を悪用するとRCEに至る可能性があることを確認しています。
Brotliの上流の修正は2月にプロジェクトのソースコードへ最初にコミットされました。その後、Node.jsとGoogleが10月21日にユーザー向けの安定版修正をリリースし、翌日に脆弱性が公開されました。修正を含むPyPIパッケージは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
Node2Shellの実証コード(PoC)はすでに公開されていますが、実際の攻撃での悪用は報告されていません。それでも、利用者は提供されているセキュリティアップデートを優先して適用すべきです。
更新後は、管理者が影響を受けたプロセスを再起動する必要があります。影響を受けたコンテナイメージも、再ビルドして再デプロイしなければなりません。
この脆弱性の影響を追跡している専用のオンラインポータル は、次の点にも注意を促しています。システムのBrotliライブラリを更新しても、Node.jsのデプロイ環境や、独自にライブラリのコピーを同梱している他のアプリでは、リスクが解消されません。
また、受信するBrotliリクエストをブロックしても、悪意あるHTTPレスポンス経由の攻撃経路は残ったままです。
すぐに更新できない場合は、PythonアプリケーションからBrotliのサポートを削除し、プロキシまたはファイアウォールの段階で、Brotli圧縮された受信リクエストをブロックするよう推奨されています。