
- Node.js(サーバーで JavaScript を動かすためのソフト)に同梱されている圧縮形式 Brotli(ブロトリ)の展開処理に、メモリを壊される脆弱性 CVE-2026-111497 が見つかりました。通称「Node2Shell」です。
- Node.js 公式は深刻度を High(高)とし、細工した圧縮データを展開すると、プロセスの停止、メモリ内容の漏えい、遠隔からのコード実行につながるおそれがあると説明しています。
- 対象は Node.js 22.x・24.x・26.x。修正版の 22.23.4 / 24.22.1 / 26.12.1 が10月21日に公開されました。20.x 以前などサポートが終わった版には修正版が出ません。
- npm のパッケージを更新しても直りません。Node.js 本体(Docker のベースイメージやサーバーの node パッケージ)を更新してください。
- 名前は似ていますが、PHPの脆弱性「php2shell」とは別の問題です。
何が起きたか
Node.js は、Webサイトの裏側(APIやWebアプリ)や社内ツールでよく使われるソフトです。Node.js の開発チームは10月21日、22.x・24.x・26.x 向けのセキュリティ更新を公開し、10件の脆弱性を修正しました。そのうちの1件が今回の CVE-2026-111497 です[Node.js 公式]。
| 項目 | 内容(Node.js 公式の発表) |
|---|---|
| CVE番号 | CVE-2026-111497 |
| 深刻度 | High(高) |
| 場所 | Node.js に同梱の Brotli デコーダー(圧縮データを元に戻す部分)。node:zlib から使われる |
| 中身 | 壊れた圧縮データを受け取ると、内部の8バイトの領域の外に書き込んでしまう(範囲外書き込み) |
| 起こりうること | プロセスの停止、メモリ内容の漏えい、遠隔からのコード実行 |
| 対象 | Node.js 26.x、24.x、22.x(サポート終了版は常に影響を受けるとしている) |
| 修正版 | Node.js 22.23.4 / 24.22.1 / 26.12.1 |
CVE番号を割り当てた Google は、原因を Google の Brotli ライブラリ(バージョン 1.0.3〜1.2.0)にあるとし、CVSS 4.0 の基本値を 9.2(Critical)としています。Brotli 側の修正版は 1.0.10 / 1.1.1 / 1.2.1 です[CVE.org・NVD]。Red Hat は深刻度を Important(重要)、CVSS 3.1 で 8.1 と評価しました[Red Hat]。評価する組織によって数字が違いますが、どれも更新が必要という点は同じです。
「Node2Shell」は報道やセキュリティ企業が使っている呼び名で、Node.js 公式の名前ではありません。
どんな使い方が危ないのか
Node.js 公式によると、攻撃が成り立つのは攻撃者が用意した Brotli データを、アプリが node:zlib で展開する場合です。Red Hat は具体例として、HTTP の Content-Encoding: br で送られてくるデータや、Node.js の zlib・fetch() のように Brotli を自動で展開する機能を挙げています[Red Hat]。
セキュリティ企業 Aikido の分析では、次のような使い方が当てはまるとされています[Aikido(二次情報)]。
- Express 5・body-parser 2.x のように、送られてきたリクエスト本文の圧縮を自動で戻すサーバー
fetch()で外部のサーバーにアクセスするアプリ(相手のサーバーが悪意を持っている、または乗っ取られている場合)。利用者が入力したURLを読み込む機能や Webhook など- 受け取ったデータを
node:zlibの Brotli 関数でそのまま展開している処理
同社は、何もしていない素の Node.js の HTTP サーバーは、受け取ったリクエストの Brotli を自分からは展開しないとも書いています。ただし使っているフレームワークやライブラリが内部で展開していることもあるため、「自分のコードでは展開していない」だけで安全とは言い切れません。
Red Hat は、確実にコードを実行できる公開の攻撃コードは確認していないとしています。Aikido は、10月22日時点で実際の悪用は報告されていないと伝えています。
対象かどうかの確かめ方
1. Node.js を使っているか
制作会社や開発担当に「サーバーやAPIで Node.js を使っているか」を確かめてください。Next.js・Nuxt・Express などで作ったサイトやアプリ、社内のチャットボット、管理ツールなどで使われていることがあります。WordPress だけのサイトでは通常使われていません。
2. バージョンを見る
サーバーやコンテナの中で次のコマンドを実行します。
node -v
| 表示 | 判定 |
|---|---|
| v26.12.1 以上(26.x) | 修正済み |
| v24.22.1 以上(24.x) | 修正済み |
| v22.23.4 以上(22.x) | 修正済み |
| 上より古い 22.x・24.x・26.x | 対象。更新が必要 |
| v25.x、v23.x、v20.x 以前 | サポート終了。修正版は出ないので、22.x 以降のサポート中の版へ移る |
Node.js 20.x のサポートは2026年4月30日に終わっています[Node.js リリース予定表]。
3. Linux の node パッケージを使っている場合
ディストリビューション(Linux の配布元)が配る nodejs パッケージは、Node.js 公式とは番号の付け方が違います。たとえば Debian の nodejs は、Brotli を Node.js に同梱せず、OS の brotli ライブラリを使っています。この場合はOS の brotli パッケージの更新が必要です[Debian セキュリティトラッカー]。詳しくは次の章を見てください。
今すぐやること
- Node.js 本体を修正版に更新する。公式サイトの配布物、nvm などのバージョン管理ツール、パッケージマネージャーのいずれかで 22.23.4 / 24.22.1 / 26.12.1 以降にします。更新後はアプリを再起動してください。
- Docker のベースイメージを入れ替える。Docker Hub の公式 node イメージには、10月22日に
22.23.4・24.22.1・26.12.1のタグが出ています。FROM node:24のような指定でも、古いイメージが手元に残っていると更新されません。イメージを取り直して作り直し、配備し直してください。 - Linux のパッケージを更新する。Debian は brotli パッケージの修正版を出しています(Debian 13 trixie:1.1.0-2+deb13u1、Debian 12 bookworm:1.0.9-2+deb12u1)。更新後、brotli を使うプロセス(Node.js など)を再起動します。Ubuntu は確認時点(10月24日)で優先度を Medium とし、brotli・nodejs とも調査中の状態でした。Red Hat 系は Red Hat の告知を確かめてください。
- サーバーレスやホスティングのサービスを確かめる。サービス側が Node.js を用意している場合(サーバーレス関数など)、更新はサービス会社が行います。各社の告知や、使っている実行環境のバージョンを確かめてください。
- すぐに更新できない場合。Node.js 公式の発表には回避策は載っていません。Aikido は一時しのぎとして、リバースプロキシやミドルウェアで
Content-Encoding: brのリクエストを断る方法を挙げていますが、fetch()で受け取る応答は防げないとしています。更新が本当の対策です。
npm update や package-lock.json の更新では直りません。Node.js 本体を更新してください。Node.js 以外への広がり
原因が Google の Brotli ライブラリにあるため、Brotli を使うほかのソフトにも影響が出ています。確認できた公式の情報は次のとおりです。
| ソフト | 対象 | 修正版 |
|---|---|---|
| Python の Brotli パッケージ(PyPI) | 1.0.3 以上 1.2.1 未満 | 1.2.1[GitHub Advisory] |
| Python の brotlicffi パッケージ(PyPI) | 1.0.3 以上 1.2.1.0 未満 | 1.2.1.0[GitHub Advisory] |
| Envoy(プロキシ) | v1.39.2、v1.38.5、v1.37.7、v1.36.11 | v1.40.0、v1.39.3、v1.38.6、v1.37.8、v1.36.12[Envoy] |
| Debian の brotli パッケージ | 12・13 の更新前の版 | 13:1.1.0-2+deb13u1 / 12:1.0.9-2+deb12u1[Debian] |
Aikido は、HTTP で Brotli を扱うライブラリやアプリ全般に広がるとして「HTTP2Shell」とも呼んでいます[Aikido(二次情報)]。Node.js を使っていなくても、Python のアプリやプロキシで Brotli を使っていないか確かめてください。
PHP2Shell との違い
10月21日には、PHP 本体の脆弱性(通称 php2shell、CVE-2026-109618 / CVE-2026-109619)の修正版も公開されました。名前が似ていて時期も重なりましたが、別の脆弱性です。
| Node2Shell | php2shell | |
|---|---|---|
| 対象ソフト | Node.js(と Brotli を使うソフト) | PHP |
| CVE | CVE-2026-111497 | CVE-2026-109618 / 109619 |
| 修正版 | Node.js 22.23.4 / 24.22.1 / 26.12.1 | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
| 多いサイト | Next.js などのWebアプリ、API、社内ツール | WordPress などのホームページ |
PHP を更新しても Node.js の問題は直りませんし、その逆も同じです。両方を使っている会社は、それぞれ更新してください。PHP の件はphp2shellの解説記事にまとめています。
経緯(日本時間)
| 日時 | 出来事 |
|---|---|
| 10月14日(現地時間) | Node.js が、10月21日以降に 22・24・26 の更新を出すと予告(最高の深刻度は High)[oss-security] |
| 10月21日 19:38ごろ | Node.js 22.23.4 / 24.22.1 / 26.12.1 が GitHub で公開[GitHub nodejs/node] |
| 10月22日 11:40ごろ | Docker Hub の公式 node イメージに修正版のタグが登場 |
| 10月22日 22:35 | Google が CVE-2026-111497 を公開(Brotli 1.0.3〜1.2.0 が対象)[CVE.org] |
| 10月23日 0:32 | GitHub Advisory(GHSA-9v8h-qqgm-4m35)公開。Python の Brotli・brotlicffi も対象と追記 |
| 10月24日 1:03 | Envoy がアドバイザリを公開 |
| 10月24日 6:09 / 7:09 | Debian が brotli の修正を公開(DSA-6582-1:Debian 13、DLA-4855-1:Debian 12) |
時刻は各ページの協定世界時の記載に9時間を足しています。
よくある質問
WordPress のサイトも対象ですか?
WordPress は PHP で動くので、Node.js の今回の問題とは基本的に関係ありません。ただし同じ時期に PHP の脆弱性(php2shell)が出ているので、そちらの更新は必要です。
Vercel や Netlify などのホスティングを使っていれば大丈夫ですか?
サービス側が Node.js の実行環境を用意している場合、更新はサービス会社が行います。ただし設定で古い Node.js のバージョンを指定していると、そのまま動き続けることがあります。各社の告知と、プロジェクトに設定した Node.js のバージョンを確かめてください。
Node.js 20 を使っています。どうすればいいですか?
Node.js 20.x はサポートが終わっており、公式の修正版は出ません。22.x 以降のサポート中のバージョンへ移行してください。
攻撃されたか分かりますか?
Node.js 公式は、悪用された場合の痕跡の見分け方を示していません。プロセスの異常終了が増えていないか、見覚えのないファイルや通信がないかなどを確認し、まずは修正版への更新を急いでください。
Node.js や PHP の更新、サーバーの状態の確認でお困りでしたらご相談ください。
参考にした情報
- Node.js 公式「Wednesday, October 21, 2026 Security Releases」
- Node.js リリース予定表(nodejs/Release)
- CVE.org CVE-2026-111497 / NVD
- GitHub Advisory GHSA-9v8h-qqgm-4m35
- Envoy GHSA-3wvj-j6qm-62mr
- Red Hat CVE-2026-111497
- Debian セキュリティトラッカー / DSA-6582-1 / DLA-4855-1
- Ubuntu CVE-2026-111497
- oss-security(2026年10月23日の投稿)
- Docker Hub 公式 node イメージ
- 二次情報:Aikido(Node2Shell の解説) / Aikido(HTTP2Shell)


