サービス概要提供内容導入の流れ料金コラム

脆弱性・注意喚起約10分で読めます

Node.js 脆弱性(2026年10月)|影響範囲と社内で確認すべき場所

執筆:AIセキュリティ顧問編集部

サーバー・コンテナ・開発PCなど社内でNode.jsが動く場所を点検する様子のイラストと、記事タイトル

この記事の要点

  • Node.jsは2026年10月21日、脆弱性10件(深刻度Highが4件)を修正したv22.23.4・v24.22.1・v26.12.1を公開しました。v20以前などサポート終了版には修正版が出ません。
  • 最も深刻なCVE-2026-111497は、攻撃者が用意したBrotli圧縮データを展開すると不正なコード実行につながる不具合で、Impervaが公式ビルド(v24.22.0)でのコード実行を実証しています。
  • 危険なのは、アプリやライブラリが外部からのBrotli圧縮データを展開する場合です。代表例は、fetch()で外部の圧縮レスポンスを読む処理と、Express 5などが圧縮されたリクエスト本文を展開する処理です。
  • Node.js内に回避策はなく、根本的な対策は修正版への更新だけです。サーバーだけでなく、コンテナイメージ・CI・開発PC、AIツールの拡張機能(MCPサーバーなど)が使うNode.jsも対象になります。

Webサービスや社内ツールの土台として広く使われている Node.js に、10件の脆弱性が見つかりました。開発チームは2026年10月21日に修正版を公開しています[1]。

このうち最も深刻なものは、細工された圧縮データを処理するとサーバー上で不正なコードを実行されるおそれがある不具合です。10月22日には、セキュリティ企業のImpervaが公式に配布されているNode.jsで実際にコードを実行できたと公表しました[5]。

この記事では、専門家でなくても判断できるように、「何が起きたか」「自社は対象か」「どこを、どのバージョンに上げればよいか」を順に整理します。情報は2026年10月23日時点のものです。

何が修正されたのか?

今回のセキュリティリリースでは、サポート中の3つの系列(v22・v24・v26)で合計10件の脆弱性が修正されました。深刻度は4段階で上から2番目の「High」が4件、「Medium」が3件、「Low」が3件です[1][8]。

10件

修正された脆弱性

High 4件・Medium 3件・Low 3件[1]

3系列

修正版が出た系列

v22.23.4・v24.22.1・v26.12.1[1]

0件

サポート終了版への修正

サポート終了版は常に影響を受けるとされる[1]

High の4件のうち3件は、通信の安全性に関わるものです。IPアドレスの書き方を工夫すると、TLS証明書(通信相手が本物かを確かめる仕組み)のホスト名の確認をすり抜けられる不具合が2件、名前解決(DNS)で特殊な文字を含む名前が途中で切れてしまう不具合が1件あります[1]。

深刻度 High の4件(公式告知のタイトルを要約)
CVE何が起きるか対象系列
CVE-2026-111497Brotli圧縮データの展開処理でメモリの範囲外に書き込み、不正なコード実行につながる[1]26 / 24 / 22
CVE-2026-106069接続先のホスト名がIPアドレスとして緩く解釈される(標準でない表記の)場合に、TLS証明書のホスト名確認をすり抜ける[1]26 / 24 / 22
CVE-2026-105483全角数字で書かれたIPアドレスで、TLS証明書のホスト名確認をすり抜ける[1]26 / 24
CVE-2026-105482dns.resolve がNUL文字を含む名前を途中で切り詰める[1]26 / 24 / 22

Medium・Low の6件には、乱数の値が起動のたびに同じになる不具合(スナップショットや単一実行ファイル化を使う場合)や、権限モデルの制限をすり抜ける不具合が含まれます[1]。

あわせて、Node.jsに同梱されている部品(OpenSSL・Undici・c-ares・SQLite)と、信頼するルート証明書の一覧も更新されました(v24.22.1 では OpenSSL 3.5.9・undici 7.30.1・c-ares 1.34.9 など)[2]。証明書の更新には、認証局eMudhraの中間証明書が侵害された問題(eMudhra Intermediate CA Compromise)への対応が含まれています[1]。

最も深刻なBrotliの脆弱性は、どんなときに狙われる?

CVE-2026-111497が問題になるのは、外部から届いたBrotli形式の圧縮データを、Node.jsが展開するときです。Node.jsは何もしなければBrotliデータを展開しないため、アプリやライブラリが展開する処理を持っているかどうかで危険度が変わります[4]。

Brotli(ブロトリ)は、Webで広く使われているデータ圧縮の形式です。Vercelによると、攻撃者が用意したBrotliデータをNode.jsのプロセスが展開すると、メモリの内容が漏れたり、任意のコードを実行されたりするおそれがあります。実行されるコードは、Node.jsのプロセスと同じ権限で動きます[4]。

危険な経路と、そうでない経路
状況影響理由
Node.jsの fetch() で、外部サーバーから圧縮されたレスポンスを取得する受ける取得したレスポンスの展開で、脆弱な処理を通る[5]
Express 5 の express.json() などで、圧縮されたリクエスト本文を受け付ける受けるExpress 5 のボディパーサーはBrotliで圧縮された本文を展開する[6][5]
素のNode.jsのHTTPサーバーで、圧縮されたリクエストを受け取るだけ単体では受けない受け取るだけでは本文を展開しない。ミドルウェアや自前の処理で展開している場合は対象[5][7]
自社で運用するNext.js(Vercel以外)受けうるNext.jsは画像最適化でBrotliのレスポンスを遮断しない[4]

どの経路でも、脆弱なのはNode.js本体の展開処理です。ミドルウェアやフレームワークは、そこへデータを届ける入口にすぎません[5]。

外部サーバーから取得した圧縮レスポンスと、ミドルウェアを通った圧縮リクエスト本文が、同じNode.jsの展開処理に流れ込む様子を表した概念図
取得したレスポンス(左上)も受け取ったリクエスト本文(右)も、同じNode.jsの展開処理を通る。盾=修正版のNode.js(概念図)

検証用のアプリには目印のファイルを作るコードはありませんでした。しかしBrotliデータを受け取ったあと、そのファイルが現れました。データに含まれていたコードが、対象のプロセス内で実行されたのです。

In the working proof of concept, the test application had no code to create our marker file. After it received the Brotli data, the file appeared. Code carried in that data had run inside the target process.

— Imperva Red Team — Node2Shell: From Brotli Data to Remote Code Execution[5]

Impervaの検証は、Linux(arm64)向けの公式イメージのv24.22.0で行われ、何度か試してコード実行に成功しています。同じデータは修正版のv24.22.1では拒否されました[5]。それ以前に公開された概念実証は、通常のビルドではクラッシュと限られたメモリの読み出しにとどまっていたと報じられており、今回の検証は通常のビルドでのコード実行を示した点でそれを超えるものです。なお、10月22日時点で実際の悪用は報告されていません[7]。

社内のどこでNode.jsが動いているか?

まず確認したいのは、Node.jsが「どこに入っているか」です。Vercelは、自社で運用するバックエンド、自前のNext.js、自分で作るコンテナイメージ、CI(自動テスト・ビルドの実行環境)、開発用のPCまで、すべて更新の対象だとしています[4]。

Node.jsが入っていることが多い場所
場所例見落としやすさ
Web・APIサーバーExpress・Next.js・NestJSなどで作ったサービス低い(担当者が把握していることが多い)
コンテナイメージDockerfileで node をベースにしたイメージ高い。パッケージの棚卸し(一覧)だけでは、コンテナに同梱された古いNode.jsを見落とすことがある[5]
CI・ビルド環境GitHub Actionsなどのランナー、ビルド用サーバー中[4]
開発者のPCローカルの開発環境中[4]
AIツールの拡張機能npx で起動するMCPサーバー(例:Playwright MCP は Node.js 18以上で動く)高い。本人も入れたことを忘れがち[9]
委託先・外部サービス制作会社が運用するサイト、SaaSの裏側高い。自社では確認できないため問い合わせる

Vercelなどのホスティングサービスでは、サービス側が修正版を順次適用している場合があります。Vercelは、Node.js 22.x・24.x を使うプロジェクトは設定の変更が不要とする一方、20.x のプロジェクトは 22.x か 24.x に切り替えて再デプロイする必要があるとしています[4]。利用中のサービスの告知を確認してください。

どのバージョンに上げればいいか?

使っている系列の修正版以上に上げます。v22系は v22.23.4、v24系は v24.22.1、v26系は v26.12.1 です[1]。v20以前やv23・v25などサポートが終わった系列には修正版が出ないため、サポート中の系列へ移る必要があります[1][3][4]。

系列ごとの修正版とサポート状況(2026年10月23日時点)
系列修正版状況・サポート終了日
v26v26.12.1[1]最新版。2026年10月28日から長期サポート(LTS)に入る予定。終了は2029年4月30日[3]
v24v24.22.1[1]長期サポート(2026年10月20日からメンテナンス期間)。終了は2028年4月30日[3]
v22v22.23.4[1]長期サポート(メンテナンス期間)。終了は2027年4月30日[3]
v20以前・v23・v25なしサポート終了(v20は2026年4月30日に終了)[3]

どの系列を選ぶか迷う場合は、2028年4月30日までサポートされる v24 か、2026年10月28日にLTS入りし2029年4月30日までサポートされる v26 が候補になります。v22 は約半年でサポートが終わります。

バージョンは、サーバーやPCでコマンド node -v を実行すると確認できます。コンテナの場合は、ホスト側ではなく実際に動いているコンテナの中で確認してください。Impervaは、コンテナに同梱されたNode.jsはパッケージの一覧では見落とすことがあると指摘しています[5]。

今週中にやることは?

対策の中心は「探す」と「上げる」の2つです。Node.jsの告知には一時的な回避策が載っておらず、根本的な対策は修正版への更新だけです[7][5]。

情シス・開発担当のチェックリスト

  • Node.jsを使っているサービス・サーバー・社内ツールを洗い出す(上の表の6か所)
  • 各環境で node -v を実行し、修正版(v22.23.4・v24.22.1・v26.12.1)以上かを確認する[1]
  • コンテナは修正版のベースイメージで作り直して再デプロイする。動いているコンテナの中のバージョンも確かめる[4][5]
  • サポート終了版(v20以前など)を使っているものは、v24かv26への移行計画を立てる[3]
  • 外部の圧縮レスポンスを fetch() で読む処理や、Express 5 で圧縮された本文を受け付けるAPIを優先して更新する[5]
  • 制作会社・運用委託先に、運用中のサイトのNode.jsのバージョンと更新予定を問い合わせる
  • 社員のPCで使っているAIツールの拡張機能(MCPサーバーなど)がNode.jsで動いていないか確認し、該当すれば更新を案内する[9]

すぐに更新できない場合は

Impervaは、更新までのつなぎとして、影響を受ける経路で信頼できないBrotliの通信を可能な範囲で制限することを挙げています。ただし、完全な対策は更新だけだとしています[5]。WAF(Webアプリへの攻撃を遮る仕組み)では、ImpervaやVercelがこの脆弱性を狙う通信を遮断するルールを追加しています[5][4]。ただしVercelは自社のWAFについて、関数が他のサーバーから取得するレスポンスは対象外で、パッチ適用の代わりにはならないとしています[4]。

なお、Impervaは、展開処理中のプロセスの予期しない終了や展開エラーが調査の手がかりになるとしつつ、それだけでは攻撃の確かな証拠にはならないとしています[5]。

社内や経営層にはどう伝えればいい?

専門用語を並べず、「何が危ないか」「自社は対象か」「いつまでに何をするか」の三つで伝えるのが近道です。Node.jsは利用者が多く、開発部門・委託先・個人のPCに分散しているため、情シスだけで全体を把握するのは難しいからです。

経営層への報告では、修正版がすでに公開されていること[1]、公式ビルドでの攻撃が実証されたこと[5]、対応の中心は更新でありコストは主に作業時間であることを伝えれば十分です。更新を後回しにする判断をするなら、その理由と期限を記録に残しておくと、後から説明を求められたときに困りません。

委託先への問い合わせでは、「運用中のサイトで使っているNode.jsのバージョン」「修正版への更新予定日」「Express 5などで圧縮されたリクエスト本文を受け付けているか」の3点を聞くと、回答を比べやすくなります[5]。

まとめ

Node.jsは2026年10月21日に10件の脆弱性を修正し、最も深刻なBrotliの不具合は公式ビルドでのコード実行まで実証されました[1][5]。外部の圧縮データを展開する処理を持つサービスは、特に優先して更新が必要です。

やることはシンプルで、「Node.jsが入っている場所を洗い出し、修正版に上げる」ことです。見落としやすいのは、コンテナの中、CI、開発PC、AIツールの拡張機能、委託先のサイトです。Impervaは、AIが脆弱性の発見と攻撃コードの作成を速めうるため、公開から修正までに対応を先延ばしできる余地は小さくなっていると指摘しています[5]。AIを使った攻撃の現状はAIサイバー攻撃が国内でも|ARTEX・Cairn悪用の実態、生成AIを安全に使うための考え方はAIセキュリティとはでも解説しています。

よくある質問

Node.jsの脆弱性(2026年10月)で、どのバージョンに更新すればいいですか?

使っている系列の修正版以上にします。v22系はv22.23.4、v24系はv24.22.1、v26系はv26.12.1です。v20以前やv23・v25などサポートが終わった系列には修正版が出ないため、2028年4月までサポートされるv24か、2026年10月28日にLTS入り予定で2029年4月までサポートされるv26へ移ってください。

Webサイトを見るだけで、この脆弱性の被害を受けますか?

ブラウザでWebサイトを見るだけでは対象になりません。これはサーバーやPCで動くNode.jsの問題で、Node.jsのアプリやライブラリが、攻撃者の用意したBrotli圧縮データ(受け取ったリクエスト本文や、取得したレスポンス)を展開するときに影響を受けます。

WAFを入れていれば、Node.jsを更新しなくても大丈夫ですか?

大丈夫ではありません。ImpervaやVercelは攻撃の通信を遮断するWAFのルールを追加していますが、両社とも更新の代わりにはならないとしています。Vercelは、自社のWAFではアプリが外部サーバーから取得するレスポンスを守れないと明記しています。WAFは更新までの時間稼ぎとして使い、修正版への更新を進めてください。

Node.jsを使っているかどうか、どうやって確認できますか?

サーバーやPCでコマンド node -v を実行し、バージョンが表示されればNode.jsが入っています。コンテナは、動いているコンテナの中で同じ確認をしてください。自社で確認できない委託先のサイトやSaaSは、運用会社に使用しているNode.jsのバージョンと更新予定を問い合わせるのが確実です。

出典・参考資料

  1. 注意喚起Wednesday, October 21, 2026 Security ReleasesThe Node.js Project Node.js 2026-10-21 公開 2026-10-23 閲覧
  2. 公式発表Node.js 24.22.1 (LTS)Node.js 2026-10-21 公開 2026-10-23 閲覧
  3. 公式発表nodejs/Release: Node.js Release Working Group (Release schedule)Node.js Release Working Group GitHub 2026-10-23 閲覧
  4. 注意喚起Node.js security advisory: Brotli decoder RCE (CVE-2026-111497)Vercel Security Team Vercel Knowledge Base 2026-10-21 公開 2026-10-23 閲覧
  5. 調査レポートNode2Shell: From Brotli Data to Remote Code ExecutionImperva Red Team Imperva 2026-10-22 公開 2026-10-23 閲覧
  6. 公式発表Upgrade to Express v5 — Brotli encoding supportExpress 2026-10-23 閲覧
  7. 記事Researchers Demonstrate Node2Shell RCE Exploit on Node.js Build Using Crafted Brotli DataThe Hacker News 2026-10-23 公開 2026-10-23 閲覧
  8. 記事「Node.js」に脆弱性10件 - Brotli圧縮データの処理でRCEのおそれSecurity NEXT 2026-10-23 公開 2026-10-23 閲覧
  9. 公式発表microsoft/playwright-mcpMicrosoft GitHub 2026-10-23 閲覧

本記事の事実関係は、2026.10.23 時点で上記の出典をすべて再確認しています。 バージョン・サポート状況は変わる可能性があります。最新の情報はNode.jsの公式告知を確認してください。

#Node.js#脆弱性#CVE-2026-111497#Brotli#Express#Next.js#パッチ管理

あわせて読みたいコラム

AIセキュリティ顧問にご興味を持ってくださった方へ