Node.jsに重大な脆弱性「HTTP2Shell」|Brotli経由でリモートコード実行の可能性
Node.js公式は2026年10月21日、複数のセキュリティ脆弱性を修正したアップデートを公開しました。
その中でも特に注意が必要なのが、Brotliデコーダーの境界外書き込みにより、リモートコード実行につながる可能性がある「CVE-2026-111497」です。
この脆弱性は、当初Node.jsで発見されたことから「Node2Shell」と呼ばれ、その後Brotliを利用する複数の製品・ライブラリにも影響することが分かったため、セキュリティコミュニティでは「HTTP2Shell」という名称でも呼ばれています。
ただし、「HTTP2Shell」はNode.js公式が使用している正式名称ではありません。また、HTTP/2固有の脆弱性ではなく、実際にはGoogleが開発する圧縮ライブラリ「Brotli」のデコーダーに存在する問題です。
Node.jsを利用しているWebサイトやWebサービスでは、対象バージョンを確認し、速やかなアップデートをおすすめします。
Node.jsのHTTP2Shellとは
今回問題となっているCVE-2026-111497は、Node.jsに組み込まれているBrotliデコーダーの処理に存在する脆弱性です。
Brotliは、Webサイトなどで通信データを圧縮するために広く利用されている技術です。
細工されたBrotli圧縮データをアプリケーションが展開すると、内部バッファの範囲外へデータを書き込む可能性があります。
Node.js公式では、この問題によって、
- Node.jsプロセスのクラッシュ
- プロセスメモリの漏えい
- リモートコード実行
につながる可能性があると説明しています。
CVE-2026-111497は「High」評価
Node.js公式は、CVE-2026-111497をHighの脆弱性として分類しています。
脆弱性は、Node.jsのnode:zlibなどを通じて、攻撃者が制御できるBrotli圧縮データを展開する場合に悪用される可能性があります。
特に、
- 外部から圧縮データを受け取るAPI
- Brotli圧縮されたHTTPコンテンツを展開する処理
- アップロードされた圧縮データを処理するサービス
などでは注意が必要です。
HTTP/2そのものの脆弱性ではない
「HTTP2Shell」という名称から、HTTP/2プロトコル自体に問題があるように見えますが、今回の脆弱性はHTTP/2そのものの問題ではありません。
原因はBrotliのC言語実装にあるデコーダー処理です。
BrotliはHTTP通信で広く利用されているため、「HTTP2Shell」という名称が使われるようになりました。
そのため、Node.jsだけでなく、Brotliを組み込んでいる別のソフトウェアやライブラリにも影響する可能性があります。
JPCERT/CCも、Node.jsで公表された後にBrotliそのものの脆弱性であることが確認され、複数製品へ影響が広がっているとして注意を呼びかけています。
Node.jsの修正版
Node.js公式は2026年10月21日、CVE-2026-111497を含む複数の脆弱性を修正した以下のバージョンを公開しています。
| Node.js系統 | 修正版 |
|---|---|
| Node.js 22.x | 22.23.4 |
| Node.js 24.x | 24.22.1 |
| Node.js 26.x | 26.12.1 |
これらより前のバージョンを利用している場合は、修正版以降へのアップデートをおすすめします。
Node.js 26の場合
node -v
現在のバージョンを確認し、26系であれば26.12.1以降へ更新します。
Node.js 24の場合
24.22.1以降が修正版です。
Node.js 22の場合
22.23.4以降が修正版です。
Node.js 20以前を利用している場合は注意
Node.js公式では、セキュリティリリースが行われた際、サポート終了済みのNode.jsバージョンについては影響を受けるものとして扱っています。
現在サポートされているリリースラインは22.x、24.x、26.xであり、古いNode.jsを利用している場合は、単なるパッチ適用ではなくサポート中のバージョンへの移行を検討する必要があります。
特に、
- Node.js 18
- Node.js 20
- それ以前のNode.js
を本番環境で使用している場合は、アプリケーションや依存パッケージとの互換性を確認しながら移行することをおすすめします。
Node.js以外にも影響
今回のCVE-2026-111497は、Node.js固有の問題ではなく、BrotliのC言語実装に存在する問題です。
JPCERT/CCによると、影響する可能性がある製品には、
- Node.js
- Bun
- Python向けBrotliパッケージ
- Brotliを組み込んだ各種アプリケーション
などが含まれます。
つまり、
「Node.jsを使っていないから影響しない」
とは限りません。
アプリケーションやサーバー、ミドルウェアがBrotliを利用している場合は、それぞれの開発元が公開しているセキュリティ情報を確認する必要があります。
Brotli本体にも修正版が公開
Google Brotli側でも修正版が公開されています。
JPCERT/CCによると、修正版は以下です。
| Brotli系統 | 修正版 |
|---|---|
| 1.0系 | 1.0.10 |
| 1.1系 | 1.1.1 |
| 1.2系 | 1.2.1 |
Brotliを直接利用しているアプリケーションや、OSパッケージとしてBrotliを利用している環境では、Node.jsだけでなくBrotli本体のアップデート状況も確認してください。
Node.jsをアップデートするだけでなく再デプロイも確認
Node.jsのバージョンを更新した場合でも、本番環境で古いNode.jsプロセスが動き続けていれば修正は反映されません。
特に、
- Docker
- Kubernetes
- VPS
- AWS
- CI/CDによる自動デプロイ
- サーバーレス環境
などでは、実際に稼働しているランタイムが修正版になっているか確認することが重要です。
Dockerの場合は、ベースイメージを更新しただけでなく、イメージを再ビルドしてコンテナを再デプロイする必要があります。
Next.jsを利用している場合もNode.jsを確認
Next.jsなどNode.js上で動作するWebフレームワークを利用している場合、Next.js本体だけを最新版にしていても、実行環境のNode.jsが古いままでは今回の脆弱性の影響を受ける可能性があります。
そのため、
- Next.jsのバージョン
- Node.jsのバージョン
- Dockerイメージ
- ホスティングサービスのランタイム
- Brotli関連ライブラリ
をそれぞれ確認することをおすすめします。
特に自社でVPSやクラウドサーバーを管理している場合は、Node.jsが自動更新されないケースが多いため注意が必要です。
Node.js利用者は22.23.4・24.22.1・26.12.1以降へ
今回のCVE-2026-111497は、Brotliデコーダーのメモリ破壊によって、条件によってはリモートコード実行につながる可能性がある脆弱性です。
Node.jsを利用している場合は、
- Node.js 22.23.4以降
- Node.js 24.22.1以降
- Node.js 26.12.1以降
へアップデートしてください。
また、今回の問題はNode.jsだけではなく、Brotliを利用する複数の製品に影響する可能性があります。
WebサイトやWebアプリケーションの管理者は、Node.jsだけを見るのではなく、サーバー・Dockerイメージ・ミドルウェア・依存ライブラリを含めた実行環境全体を確認することが重要です。
公式情報
Node.js「Wednesday, October 21, 2026 Security Releases」
https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
Node.js 26.12.1
https://nodejs.org/en/blog/release/v26.12.1/
JPCERT/CC「BrotliのC言語実装における境界外書き込みの脆弱性(CVE-2026-111497)に関する注意喚起」
https://www.jpcert.or.jp/at/2026/at260034.html





