緊急PHPに致命的な脆弱性(CVSS 9.2)。セキュリティ企業CYFIRMA、北朝鮮系とみられる集団がPHP2Shellを狙う攻撃を準備中と発表。標的の国に日本も最新情報 ›
無料で相談する

【10/24最新】Node.jsの脆弱性「Node2Shell」とは?圧縮データの読み込みで乗っ取られるおそれ。対象バージョンと更新方法(CVE-2026-111497)

公開:10/24 16:15更新 (日本時間)Webセキュリティ診断センター 編集部約10分で読めます
【10/24最新】Node.jsの脆弱性「Node2Shell」とは?圧縮データの読み込みで乗っ取られるおそれ。対象バージョンと更新方法(CVE-2026-111497)
#Node2Shell#Node.js#脆弱性
この記事の要点(2026年10月24日 16時時点)
  • 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(二次情報)]。

同社は、何もしていない素の 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 セキュリティトラッカー]。詳しくは次の章を見てください。

今すぐやること

  1. Node.js 本体を修正版に更新する。公式サイトの配布物、nvm などのバージョン管理ツール、パッケージマネージャーのいずれかで 22.23.4 / 24.22.1 / 26.12.1 以降にします。更新後はアプリを再起動してください。
  2. Docker のベースイメージを入れ替える。Docker Hub の公式 node イメージには、10月22日に 22.23.4・24.22.1・26.12.1 のタグが出ています。FROM node:24 のような指定でも、古いイメージが手元に残っていると更新されません。イメージを取り直して作り直し、配備し直してください。
  3. 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 の告知を確かめてください。
  4. サーバーレスやホスティングのサービスを確かめる。サービス側が Node.js を用意している場合(サーバーレス関数など)、更新はサービス会社が行います。各社の告知や、使っている実行環境のバージョンを確かめてください。
  5. すぐに更新できない場合。Node.js 公式の発表には回避策は載っていません。Aikido は一時しのぎとして、リバースプロキシやミドルウェアで Content-Encoding: br のリクエストを断る方法を挙げていますが、fetch() で受け取る応答は防げないとしています。更新が本当の対策です。
npm の brotli パッケージは関係ありません 今回の問題は Node.js 本体に組み込まれた部分にあります。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.11v1.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)の修正版も公開されました。名前が似ていて時期も重なりましたが、別の脆弱性です。

Node2Shellphp2shell
対象ソフトNode.js(と Brotli を使うソフト)PHP
CVECVE-2026-111497CVE-2026-109618 / 109619
修正版Node.js 22.23.4 / 24.22.1 / 26.12.1PHP 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:35Google が CVE-2026-111497 を公開(Brotli 1.0.3〜1.2.0 が対象)[CVE.org]
10月23日 0:32GitHub Advisory(GHSA-9v8h-qqgm-4m35)公開。Python の Brotli・brotlicffi も対象と追記
10月24日 1:03Envoy がアドバイザリを公開
10月24日 6:09 / 7:09Debian が 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 の更新、サーバーの状態の確認でお困りでしたらご相談ください。

参考にした情報

貴社のサイトに合った対応をご案内します!
まずは、お気軽にご相談ください。

お問い合わせ・お見積りはこちら
無料で相談する最新情報を見る