CISA Warns of Active Attacks Exploiting Critical Node2Shell RCE Vulnerability in Node.js
2026/10/29 gbhackers — 2026年10月27日に CISA は、Node.js に影響する Google Brotli の深刻な脆弱性 CVE-2026-111497 を、Known Exploited Vulnerabilities (KEV) カタログに追加した。この脆弱性を悪用する未認証の攻撃者は、細工した圧縮データストリームを通じて、メモリ破損/サービス停止/機密情報の漏えい/任意のコード実行につながる可能性がある。KEV カタログの登録情報によると、米国連邦政府機関の修正対応期限は 11月10日となっている。

この脆弱性 CVE-2026-111497 (CVSS 9.2) は、Node2Shell/HTTP2Shell/Broccoli2Shell という名称でも知られており、深刻度は Critical と評価されている。一般には Node.js に関連する脆弱性として扱われているが、根本的な欠陥は Google の Brotli デコーダに存在する。
この脆弱性が悪用可能かどうかは、攻撃者の制御する圧縮データを、アプリケーションが Brotli デコーダで処理するかどうかにより決まる。つまり、脆弱なバージョンの Node.js を実行しているだけで、悪用可能な HTTP エンドポイントが自動的に公開されるわけではない。
Node2Shell のリモート・コード実行の脆弱性
この脆弱性は、Brotli の不正なブロックタイプ切り替え処理に起因する。データストリームでブロックタイプが 1種類しか宣言されていない場合、ブロックタイプの切り替えは無効となる。しかし、脆弱なデコーダの補助関数は、無効な切り替えと入力データの不足に対して、同じ真偽値を返してしまう。
その結果、デコーダは不正なデータストリームを拒否せず、追加のバイトデータを要求し続ける。最終的に内部の8バイトのバッファでオーバーフローが発生し、隣接するメモリ領域が破損する。
この脆弱性は、CWE-252 (戻り値の未確認) と CWE-787 (境界外書き込み) が組み合わさったものである。上流の修正パッチでは、BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH という独立したエラー処理が導入され、不正なデータストリームの処理を直ちに終了するようになった。Google は、Brotli 1.0.3 以降のリリース系列を影響対象としており、修正版は 1.0.10/1.1.1/1.2.1 として提供されている。
攻撃経路には、Content-Encoding: br を指定した受信リクエストおよび、組み込みの fetch() で処理される悪意の圧縮レスポンス、node:zlib による直接的な解凍処理が含まれる。Express のリクエスト本文解析ミドルウェアや Koa の連携機能では、ルートハンドラが実行される前にリクエスト本文が解凍される場合がある。
実際の悪用が確認されている React2Shell の脆弱性とは異なり、今回の問題は React Server Components のデシリアライズ処理ではなく、圧縮データの処理が原因となっている。
ELLIO の技術調査によると、Node.js 24.22.0 を実行する、変更を加えていない 4種類の x86-64 環境で、研究者たちはコード実行を再現した。その対象に含まれるのは、Express/Koa/解凍処理を呼び出す標準的な HTTP アプリケーション/公式コンテナなどである。取得されたシェルはサービス・アカウントの権限を引き継いでおり、root 権限で実行されていたコンテナでは root シェルが取得された。
10月26日に ELLIO が観測したのは、IP アドレス 94.154.43.7 から、公式の Node.js 24.22.0 x86-64 バイナリを標的とする、23,069,983バイトの悪用リクエストである。
重要なのは、悪用の試行と侵害の成功を、研究者が明確に区別している点である。観測された攻撃者の一連の攻撃手順を、実験環境で 50回試した結果、いずれもコード実行には成功しなかった。その一方で、研究者が独自に検証した別の攻撃手順では、同じ脆弱な対象環境でシェルの取得に成功した。
悪用に失敗した場合でも、ワーカープロセスがクラッシュし、サービスの可用性が損なわれる可能性がある。また、コアダンプが有効になっている環境では、認証情報などを含むプロセスメモリが、クラッシュにより保存される場合がある。そのため、コアダンプへのアクセス制御と保存期間の管理も必要となる。
管理者にとって必要なことは、使用しているリリース系列に応じて、Node.js のセキュリティ・アップデート 22.23.4/24.22.1/26.12.1 を適用することだ。また、サポートが終了している 20.x/23.x/25.x の環境では、サポート対象の系列への移行が必要となる。また、コンテナイメージの再ビルド/サービスの再起動/別途組み込まれている Brotli 実装の更新も必要である。
Brotli 形式で圧縮された受信リクエスト本文を、一時的に拒否することで、攻撃経路を減らすことが可能になるが、悪意の圧縮レスポンスを利用する攻撃には対応できない。修正済みビルドであっても、古いライブラリのバージョン文字列が維持される場合があるため、process.versions.brotli の値ではなく、Node.js ランタイム自体のリリースバージョンを確認する必要がある。
この記事は、Node.js の Brotli 解凍処理に存在する脆弱性 Node2Shell CVE-2026-111497 が、CISA KEV カタログに追加された事象について解説するものです。ブロックタイプの切り替え処理における不備と境界外書き込みの発生が背景に存在します。影響として、メモリ破損/サービスの停止/機密情報の流出/任意のコード実行が生じる恐れがあります。対応策として、KEV カタログの運用に基づいた修正済みバージョンへの急速な移行/コンテナ環境の再構築/各種アクセスの制限が求められます。
You must be logged in to post a comment.