Node.js 脆弱性と npm サプライチェーン攻撃|自社ツールの確認事項
Node.js 脆弱性と npm サプライチェーン攻撃:先に結論と確認日時
Node.js(JavaScript をサーバーやパソコンで動かす土台)の開発元は、2026年10月21日付で、脆弱性(ソフトの弱点)10件を直した修正版を公開しました。npm(Node.js 用の部品を配る倉庫)では、2026年に入り、部品の配布元が乗っ取られて悪意ある版が出回る「サプライチェーン攻撃」(仕入れ先を狙う被害)が続いています。Node.js プロジェクトの告知、JPCERT/CC(日本のセキュリティ対応機関)の注意喚起、各社の分析を、2026年10月27日 9時時点で確認しました。
先に結論です。
- 関係があるか:自社の業務ツール・Webアプリ・社内の自動化・AI 開発ツールを Node.js で動かす会社(制作会社に頼む場合を含む)が対象です。どちらも使っていなければ、この記事の作業は要りません。
- Node.js:修正版は 22.23.4・24.22.1・26.12.1 です。Node.js 20 は2026年4月30日にサポートが終わっています。
- npm:悪意ある部品を入れた時点で、パソコンや自動ビルドにある鍵が盗まれた事例が報告されています。自動で最新にしない、公開直後の版を避ける、鍵を最小にする、の3点を決めます。
状況は変わりえます。最新は Node.js 公式の告知と JPCERT/CC のページで読み直してください。PHP や Chrome など、ほかの脆弱性はまとめの記事にあります。
目次
自社に関係があるか:Node.js と npm の使用の調べ方
たとえるなら、Node.js は厨房の設備で、npm は食材を仕入れる問屋です。出来合いの料理(買ったソフトやクラウドサービス)を使うだけなら、この件は関係しません。WordPress の土台の PHP は別の話で、PHP の記事で扱いました。
| 調べる場所 | 見つけ方 |
|---|---|
| 開発担当・制作会社 | 「Node.js と npm を使っているものはどれか、版はいくつか」と聞きます。 |
| 開発用のパソコン | ターミナル(命令を文字で打つ画面)で node -v と打つと、Node.js の版が出ます。 |
| 作ったもののフォルダ | package.json や package-lock.json があれば、npm の仕組みで部品を入れている可能性が高いです。 |
| サーバー・コンテナ | Docker(厨房ごと運べる箱のようなもの)の設定に FROM node: で始まる行があれば、Node.js が入っています。 |
Node.js の修正版:10月21日の告知で分かること
Node.js プロジェクトの告知によると、修正版は 22.23.4・24.22.1・26.12.1 です。10件のうち、最も重い区分の High が4件、Medium が3件、Low が3件です。区分は Node.js プロジェクトのもので、数字の点数は告知にありません。High の4件を、次の表にまとめました。
| CVE(識別番号) | 告知の説明(当社の要約) | 対象の系統 |
|---|---|---|
| CVE-2026-105482 | 名前を引くとき特殊な文字以降を切り捨て、別の名前の結果を返す。 | 22・24・26 |
| CVE-2026-105483 CVE-2026-106069 |
IP アドレスの書き方(全角数字、先頭が 0)を取り違え、証明書の確認を誤る。 | 105483 は 24・26、106069 は 22・24・26 |
| CVE-2026-111497 | Brotli(圧縮形式)の展開で、メモリの範囲外に書き込む。 | 22・24・26 |
Brotli の件:Node.js 以外にも広がる
CVE-2026-111497 について、Node.js の告知は、外部から受け取った圧縮データを node:zlib で展開するアプリで、クラッシュ、メモリ内容の漏えい、リモートコード実行(外部から勝手にプログラムを動かされること)が起こりうると説明しています。回避策の記載はなく、案内は更新だけです。JPCERT/CCは10月26日付(JPCERT-AT-2026-0034)の注意喚起で、影響を受ける製品に Node.js・Bun・Python 向け Brotli パッケージなどが含まれ、Google は緩和策を提供していないと書いています。
深刻度は、評価した主体で違います。CVE を割り当てた Google は、CVSS(深刻さを0〜10で表す物差し)v4.0 で 9.2(Critical)、Node.js プロジェクトは High です。
悪用の状況は、情報源によって違います。CISA(米国のサイバー防衛機関)の評価記録(10月23日付)は悪用を「なし」とし、悪用確認済みの一覧(KEV)の10月26日版にも載っていません。一方、ELLIO(セキュリティ会社)は10月26日付で、公開済みの攻撃コードを使った通信を自社の観測機器で記録したと報告しています。Aikido(セキュリティ会社)は、修正前の版で攻撃を実証した研究者がいると書いています。成功して被害が出た例は、確認できませんでした。
Web アプリの部品 Next.js にも更新があります
Next.js は、公式の告知(10月14日付)で、修正版 16.4.1・15.5.28 を出しました。遠隔からプログラムを動かされる脆弱性2件は Next.js の区分で Critical で、うち1件に回避策は知られていないと書いています。JPCERT/CC の週間報告(10月21日付)は、1件(CVE-2026-96889)で実証用コードの公開を確認したとしています。使っているなら、版を聞きます。
サポート期間と Node.js 20:終わった版は直らない
| 系統 | 状態 | サポート終了の予定 |
|---|---|---|
| Node.js 20 | 終了済み | 2026年4月30日 |
| Node.js 22 | 保守期間(Maintenance LTS) | 2027年4月30日 |
| Node.js 24 | 長期サポート(Active LTS) | 2028年4月30日 |
| Node.js 26 | 最新版(Current)。予定表では2026年10月28日から長期サポート | 2029年4月30日 |
出典:Node.js 公式のリリース予定表(10月27日確認)。日付は変わりうるとの注記があります。
Node.js 20 について、告知は名指しせず、「サポートが終わった版は、セキュリティリリースのたびに常に影響を受ける」と書いています。配布一覧の最後の 20 系は 20.20.2(2026年3月24日)で、10月27日に 20 系の更新は見当たりませんでした。公式の EOL(サポート終了)のページは、最新の LTS への更新を求めています。当社の整理では、移行の時期を開発担当と決めるのが先です。
npm のサプライチェーン攻撃:何が起きているか
たとえるなら、食材の問屋の出荷担当者になりすまし、中身をすり替えた箱を正規の伝票で出荷するようなものです。ここでは防御の観点で、公表内容だけを整理します。
| 時期 | 報告された内容(報告した主体) |
|---|---|
| 2026年5月19日 | AntV:保守者のアカウントが乗っ取られ、約30分で300超のパッケージに637の版が公開された(Snyk の集計)。 |
| 2026年8月4日 | Keyv:keyv の保守者の GitHub アカウントが乗っ取られ、盗まれた鍵で他の部品にも広がった。Wiz は400超のパッケージ、シンガポールの CSA は8月6日付で1,300超の版と整理。 |
| 2026年10月5日 | @subql/common:リリースの流れが書き換えられ、外部から取った中身が公開された(StepSecurity)。 |
数え方は報告元で違います(10月27日確認)。
事例から分かる4点
- 取り込んだ時点で、鍵が狙われます。パソコンや自動ビルド(部品を組み立てて試す自動の仕組み)にある、クラウド・GitHub・npm・SSH の認証情報です(Microsoft、Wiz)。
- 署名や来歴(どこで作ったかの証明)があっても、中身は保証されません。Socket は、正規の公開の流れが改ざん後の元データから作ったため、keyv 6.0.0 は来歴の確認が通ったと書いています。封印シールが本物でも、詰めた工場がすり替えられた箱のようなものです。
- インストール時の処理を止めるだけでは、足りない例があります。StepSecurity は、@subql/common が部品を読み込む時にも処理を始めると書いています。
- AI 開発ツールの設定も狙われました。Socket・Wiz・Microsoft は、Claude Code と VS Code の設定ファイルに、自動で起動する仕掛けが書かれたと報告しています。
公的機関の状況です。IPA の「情報セキュリティ10大脅威 2026」は、「サプライチェーンや委託先を狙った攻撃」を組織向けの2位にしています。npm の部品の攻撃を題にした日本の注意喚起は、確認できませんでした。
自社でやること:最初の1日・1週間以内・1か月以内
最初の1日:Node.js の版を確かめる
- 調べる:node -v で版を見て、22.23.4・24.22.1・26.12.1 以上かを確かめます。20 以下なら、1か月以内に移行の計画を立てます。
- 聞く:外部から受け取った圧縮データを展開する処理があるかを、開発担当に聞きます。分かるまでは、更新を優先します。
1週間以内:更新し、入っている部品を調べる
バックアップを取り、試験してから更新します。動いているプログラムは再起動するまで古い部品を使うため、更新後に再起動し、Docker の環境は作り直します(当社の整理)。npm の公式文書では、npm ls 部品名 --all で入っている版を、npm explain 部品名 でどの部品が持ち込んだかを調べられます。シンガポール CSA の表には、keyv 6.0.0 などの版があります。8月4日以降に入れた環境が、確認の対象です(当社の整理)。
1か月以内:仕組みで減らす
- ロックファイルで固定し、npm ci で入れる。たとえるなら、買い物リストに銘柄まで書いておくようなものです。npm 公式によると、npm ci は、ロックファイルと package.json が合わなければエラーにします。ただし、更新の操作をした時点で悪意ある版が公開されていれば、それが入ります。
- 公開直後の版を避ける。npm 11.10.0 以降の min-release-age は、公開から指定の日数がたった版だけを入れます。新商品の発売直後は仕入れず、評判を待つのに相当します。推奨日数は npm 公式になく、セキュリティ修正の取り込みも遅れうるため、日数は開発担当と決めます。Dependabot(GitHub の自動更新の提案機能)の cooldown は、初期値が3日で、セキュリティ更新は対象外です。
- インストール時の処理を、既定で止める。npm 12 は、承認した部品(allowScripts)以外の処理を既定で止めます。対応する Node.js は、22.22.2 以上の 22、24.15.0 以上の 24、26 以上です。Node.js に同梱の npm は 10.9.9〜11.20.0 のため、別に更新します。npm 11 以前には ignore-scripts という設定があります。止めるだけでは足りない例(前章)もあります。
- 鍵と権限を絞る。GitHub と npm のアカウントには、フィッシングに強い多要素認証を使います(CISA が2025年9月に推奨)。守り方はパスワードと ID の記事にあります。GitHub の公式文書は、自動処理の GITHUB_TOKEN を最小限の権限にし、外部のアクションを commit SHA で固定するよう書いています。
AI 開発ツールを使う会社の決めごと
AI に部品の追加や更新を任せると、取り込む操作を AI が引き起こします。当社の整理では、次の3点を決めます。任せる範囲の考え方は、AIにパソコン操作を任せる前の6つの記事にもあります。
- 部品を新しく入れる前に、人が確認する。AI が挙げた部品名は、npm の公式ページで実在と提供元を確かめる。
- 鍵を置いたフォルダで、AI ツールを動かさない。Claude Code の公式文書も、仮想マシンでの実行を挙げています。
- 作業フォルダに、見覚えのない設定ファイル(.claude や .vscode の中)が増えていないかを見る。
影響を受けたかもしれないとき
Wiz とシンガポール CSA が共通して挙げる順です。
- 開発とビルドの環境から、影響を受けた版を探して取り除きます。
- 入れていた環境は、侵害された可能性があるものとして扱い、作り直します。
- クラウド、GitHub、npm、SSH の鍵を入れ替えます。Microsoft は、きれいな端末から行うよう書いています。鍵の扱いはAPIキーとパスワードの記事にもあります。
Snyk と Socket は、常駐する仕掛けを先に取り除いてから、鍵を失効させるよう書いています。調査と復旧は、専門家に相談します。
開発担当・制作会社に聞く質問(ひな形)
| 聞くこと | 聞く理由 |
|---|---|
| Node.js と npm を使う開発物と版を教えてください。修正版以上ですか。 | 対象か、20 以下か、10月21日の修正が入っているかが分かります。 |
| 外部から受け取った圧縮データを展開する処理はありますか。 | Brotli の件の影響を見極める材料です。 |
| 8月4日以降に、keyv 系の部品を入れた記録はありますか。 | Keyv の事例の影響を確かめます。 |
| 部品の版は固定し、公開直後の版を避ける設定はありますか。 | 自動で最新に変わる経路を減らせます。 |
| 開発用パソコンと自動ビルドに、どんな鍵が置かれていますか。 | 盗まれうる範囲が分かります。 |
質問は当社の案です。
確認できなかったこと
公式の資料で確認できなかった点です。「書かれていない」ことは、「ない」ことではありません。
- JPCERT/CC と IPA が、npm の部品の攻撃を題にした注意喚起を出しているか。10月27日に JPCERT/CC の RSS(直近の掲載分)と IPA の一覧で確かめた範囲では、見つかりませんでした。
- Brotli の件で成功した被害の例と、Node.js 20 向けの修正版(配布一覧に見当たらないだけで、出ないとは言い切れません)。
- 各事例の被害会社名、盗まれた情報の量、npm が悪意ある版を取り下げた時刻(確認した資料に記載なし)。
よくある質問
Node.js も npm も使っていない会社は、何かする必要がありますか。
この記事の作業は要りません。自社で作った業務ツールやWebアプリがなく、買ったソフトやクラウドサービスを使うだけの会社が当てはまります。制作会社が使っていないかは、聞いておくと確かです。
Node.js 20 を使っています。どうすればよいですか。
公式の予定表で2026年4月30日にサポートが終わっています。公式は最新の LTS への更新を求めているため、移行の時期を開発担当と決めます。
Node.js の脆弱性は、実際に攻撃されていますか。
情報源によって違います。CISA の評価記録(10月23日)は悪用なしですが、ELLIO は10月26日付で、攻撃コードを使った通信を記録したと報告しています。成功した被害の報告は確認できませんでしたが、更新は早めに行います。
ロックファイルがあれば、npm の攻撃は防げますか。
それだけでは防げません。ロックファイルは、部品の版が勝手に変わらないようにする記録です。更新の操作をした時点で悪意ある版が公開されていれば入るため、公開直後の版を避ける設定などと組み合わせます。
公開から日数をおいて部品を入れる設定は、入れたほうがよいですか。
選択肢の一つです。npm の min-release-age は、公開から指定の日数がたった版だけを入れます。日数の推奨値は npm 公式になく、セキュリティ修正の取り込みも遅れうるため、開発担当と決めます。
まとめ
Node.js は10月21日付で修正版が出て、20 はサポートが終わっています。npm では、取り込んだ環境の鍵が狙われました。最初の1日は版の確認、1週間以内は更新と部品の確認、1か月以内は仕組みの見直しです。
参照元・出典
- Node.js 公式:セキュリティリリース告知、リリース予定表、サポート終了版、配布一覧、docker-node
- 公的機関:JPCERT/CC(10月26日)、IPA 10大脅威 2026、シンガポール CSA(8月6日)、CISA(2025年9月)、KEV
- CVE・NVD:CVE、NVD
- npm:設定、npm ci、package-lock.json、12.0.0、v12 の予告
- GitHub 公式:Actions のセキュリティ文書、Dependabot の設定
- Web アプリ:Next.js の告知、JPCERT/CC 週間報告
- セキュリティ各社:Snyk、Chainguard、Wiz、ELLIO、Socket、Aikido、StepSecurity、Microsoft
- AI ツール:Claude Code のセキュリティ文書
本記事は 2026年10月27日 9時の確認時点のものです。