CC for Biz
2026/11/03Claude Code
セキュリティ導入・運用

Node.jsのセキュリティ更新|10月の脆弱性と版の上げ方

Node.jsのセキュリティ更新|10月の脆弱性と版の上げ方

「Node.js の脆弱性のニュースを見たけれど、自分のパソコンは関係あるのか」「AI に作ってもらったアプリは Node.js で動いているらしいが、何をすればいいのか」——AI と一緒に開発を始めた人ほど、こうした不安を抱えます。

結論から言うと、2026年10月21日に Node.js は22・24・26の3系統で脆弱性10件(うち重大度 High が4件)を直しました。22.23.4・24.22.1・26.12.1 より前の版を使っているなら上げるのが答えで、20・23・25の系統には直した版が出ません。注意したいのは、node -v で見える1本だけを上げても終わらないことです。

株式会社Fyveは、記事作成や定期処理を無人で回している Mac mini で、実際にこの確かめ方を試しました。その結果、node -v に出てこない2本目の Node.js が見つかり、どちらも直る前の版でした。本記事では、公式の発表の中身と、私たちが確かめた手順をそのままお伝えします。

Node.js 2026年10月のセキュリティ更新の概要

Node.js の公式ブログは、2026年10月21日付で「Wednesday, October 21, 2026 Security Releases」を公開しました。対象は 26.x・24.x・22.x の3系統で、直った版は次のとおりです。

系統

直った版

公開日(配布一覧の日付)

サポートの状態

26.x

26.12.1

2026年10月21日

10月28日の 26.13.0 から LTS(長期サポート)

24.x

24.22.1

2026年10月20日

10月20日から保守期間(2028年4月末まで)

22.x

22.23.4

2026年10月20日

保守期間(2027年4月末まで)

20.x・23.x・25.x

なし

—

サポート終了。直した版は出ない

配布一覧(nodejs.org/dist/index.json)では 22.23.4 と 24.22.1 の日付が10月20日になっており、公式ブログの日付と1日ずれています。どちらも「security」の印が付いた版です。

直ったのは10件で、公式の評価で High が4件、Medium が3件、Low が3件です。加えて、依存している部品(c-ares・OpenSSL・Undici・SQLite など)の更新と、鍵の漏えいがあった eMudhra の中間証明書の取り外しも入っています。

公式ブログは「サポートが終わった版は、セキュリティ更新があるたびに必ず影響を受ける」と書いています。20 や 25 を使っている場合は、版を上げるのではなく、22・24・26 のどれかへ移ることになります。

直った脆弱性10件の中身

10件を、何が起きるかと、気にするべき人で並べると次のとおりです。

Node.js 2026年10月のセキュリティ更新で直った10件の一覧。High4件・Medium3件・Low3件と対象の系統

いちばん重いのは Brotli の展開の脆弱性(CVE-2026-111497)

Brotli は、Web でよく使われるデータの圧縮方式です。Node.js に入っている Brotli の展開処理に範囲外の書き込みがあり、公式ブログは「アプリが node:zlib で展開する Brotli のデータを攻撃者が用意できると、プロセスのメモリを壊せる。落ちる・メモリの中身が漏れる・遠隔からコードを実行される、のいずれかにつながる」と説明しています。

公式の評価は High ですが、Akamai と Qualys の解説によると、CVE の記録では CVSS 4.0 で 9.2(Critical)とされています。セキュリティ企業の Akamai は、この脆弱性を「Node2Shell」と呼んで解説しています。

Akamai の解説(10月26日)によると、展開の経路は zlib.brotliDecompress() だけではありません。

  • 組み込みの fetch():Brotli で圧縮された応答を自動で展開する。つまり、悪意のある(または乗っ取られた)サーバーにつなぐだけで狙われうる
  • Express 5 と body-parser 2:Content-Encoding: br で送られてきたリクエストの本文を、既定で展開する(inflate の既定が true のため)。誰でも送れる
  • 素の Node.js の HTTP サーバー:受け取った本文を自分では展開しない

AI に作ってもらった API サーバーが Express 5 で書かれている、という人は少なくないはずです。Akamai は、圧縮した本文を受け取る必要がないなら body-parser の inflate を false にする(展開せず 415 で断る)という一時しのぎも挙げていますが、根本の対処は版を上げることだけだとしています。なお、私たちが確かめた一次情報(公式ブログ)と上の2社の解説には、実際に悪用された事例は書かれていません。

TLS のホスト名確認のすり抜け(High 2件・Medium 1件)

TLS は、https の通信で「つないだ相手が本物か」を証明書で確かめる仕組みです。今回、IP アドレスの書き方を変えると、この確かめがすり抜けられる不具合が3件直りました。

  • 0127.0.0.1 のように先頭に0を付けた書き方で、接続先と違う IP に対して証明書が照合される(High・3系統)
  • 127.0.0.1 のように全角数字で書くと、IP の一致しない証明書で接続が通る(High・26・24のみ)
  • 0177.0.0.1・0x7f.0.0.1・2130706433・127.1 のような書き方で、DNS 名しか入っていない証明書で IP への接続が通る(Medium・3系統)

Qualys の解説(10月23日)は、「利用者の代わりに、指定された先へつなぐサービス」がいちばん危ないとしています。URL を受け取って中身を取りに行く機能(Web ページの要約、画像の取り込み、Webhook の送り先の登録など)を持つアプリが当てはまります。

dns.resolve が名前を切り詰める(High)

dns.resolve*() と dns.reverse() が、NUL 文字(文字コード0の見えない文字)が入ったホスト名を黙って途中で切ります。「この名前なら許可」と確かめてから引く処理だと、確かめた名前とは別の名前の結果で動いてしまいます。Qualys によると、dns.lookup は対象外です。

これは手元で試せる内容だったので、次の節で実際に比べた結果を載せます。

残りの6件

  • keep-alive の応答の取り違え(Medium):http.Agent で接続を使い回すと、要求を送る前に届いていた応答を正しい応答として受け取ることがある
  • スナップショットの乱数(Medium):起動を速くするスナップショットや単一実行ファイル(SEA)から起動すると、crypto.randomUUID() が最大127個、randomInt() が約1,000個、どのプロセスでも同じ値を返す
  • Permission Model の3件(Low):--allow-fs-read などで読み書きできる場所を絞る仕組みが、ワイルドカードで広く許したり、fs.realpathSync() で確認を飛ばしたりする。Qualys は「影響のある版では Permission Model を安全の境界として頼らないこと」と書いています
  • ZipFile(Low・26.x のみ):26.8.0 で入った実験的な API が、検証に失敗した後に別の中身を返す
この記事を読んでいるあなたへ無料プレゼントClaudeのこの5つの設定、今すぐ見直した方がいい共有・学習・入力・権限・委任。事故が起きるのはこの5つだけ(全28ページ)
見落としやすい共有リストは3つある(3つ目は画面の下)学習をオフにしても残る、公式の例外条項権限モード6つの違いと、Shift+Tabでの切り替え方
中身のプレビューを見る ↓登録すると、過去の特典もまとめて受け取れます(PDF 19点・合計499ページ + すぐ使えるzip素材 3点)

私たちの Mac mini で確かめた結果

私たちは、記事の図解の書き出しやブラウザ操作の自動処理を、Mac mini で無人で回しています。どれも Node.js の上で動くので、11月3日に改めて中を確かめました。

Mac miniに入っていた2つのNode.js(PATHのv22.23.1とPlaywright同梱のv24.14.1)と、環境を確かめる5つの順番

1本目:PATH の上の node は v22.23.1

which -a node で見えたのは1本だけで、版は v22.23.1 でした。22系の直った版は 22.23.4 なので、直る前です。配布一覧を見ると、7月28日の 22.23.2 にも「security」の印が付いていて、2回分のセキュリティ更新が当たっていない状態でした。

常時動かしている機械ほど、「今動いているものを止めたくない」という理由で後回しになります。私たちの Mac mini も、10月の eMudhra の証明書の件で Node.js の版を見ていたのに、上げるところまで進んでいませんでした。

2本目:Playwright が自前で持つ node は v24.14.1

ブラウザ操作のライブラリ Playwright の Python 版は、中に自前の Node.js を持っています。Python の環境の中の playwright/driver/node がそれで、which にも node -v にも出てきません。版を見ると v24.14.1 で、24系の直った版(24.22.1)より前でした。

入っていた Playwright は 1.59.0 です。PyPI で最新の 1.64.1(10月22日公開)を落として中を開くと、同梱の Node.js は v24.22.1 になっていました。つまりこちらは、Node.js ではなく Playwright を上げれば直るということです。PATH の node を上げても、こちらは古いまま残ります。

直った版で、名前の切り詰めが止まるのを確かめた

常用の版を入れ替える前に、公式の 22.23.4 を別のフォルダに展開し(配布元の SHASUMS256.txt でファイルの照合をしてから)、古い版と同じスクリプトを当てて比べました。

// NUL 文字の入った名前を dns.resolve4 で引く
const dns = require('dns').promises;
dns.resolve4('example.com\0.invalid')
  .then(r => console.log('resolved', r.length))
  .catch(e => console.log('error', e.code));

版

結果

v22.23.1(直る前)

2件の結果が返った(example.com として引かれた)

v22.23.4(直った版)

ERR_INVALID_ARG_VALUE で拒否された

直る前の版では、\0 から後ろが黙って捨てられ、example.com の結果が返りました。直った版は、名前そのものを不正な値として拒否します。公式ブログの説明どおりの動きを、自分の手元で確かめられました。同じ比べ方で、OpenSSL が 3.5.7 から 3.5.9 に、Undici(fetch の中身)が 6.27.0 から 6.29.1 に上がっていることも process.versions で見えます。

自分の環境の Node.js の版を確かめる方法

私たちの例のとおり、確かめる場所は1か所ではありません。上から順に見ていきます。

1. PATH の上の node を見る

which -a node
node -v

which -a は、同じ名前のコマンドを PATH の中から全部出します。2行以上出たら、上にあるものが使われています。Windows なら where node です。

2. 版の管理ツールの中を見る

nvm・Volta・fnm などで複数の版を入れている場合、プロジェクトごとに違う版が使われます。

nvm ls          # nvm
volta list node # Volta
fnm list        # fnm

プロジェクトのフォルダに .nvmrc や .node-version、package.json の engines や volta の指定があれば、そこに書かれた版が使われていないかも見ておきます。

3. ライブラリやアプリが同梱している node を探す

見落としやすいのがここです。Qualys も、版の管理ツール・アプリのフォルダ・同梱のランタイム・コンテナのイメージ・サーバーレスの実行環境を探すよう書いています。Mac なら、ホームフォルダの下にある node という名前の実行ファイルを探せます。

find ~ -maxdepth 7 -type f -name node -perm -u+x 2>/dev/null

見つかったものは、それぞれ <見つかったパス> -v で版を出します。範囲が広いと時間がかかるので、Python の仮想環境や開発用のフォルダから先に見るのがおすすめです。私たちの Playwright の node は、この方法で見つかりました。

4. Docker やサーバーの中を見る

Docker で動かしているなら、イメージの中の版を見ます。

docker run --rm <イメージ名> node -v

node:22 のような系統だけのタグを使っていても、作った時点の版で固まっています。docker pull で取り直してからイメージを作り直さないと、新しい版になりません。

Node.js の版の上げ方

入れ方によって上げ方が違います。同じ系統の直った版以降へ上げるのが、いちばん影響の小さいやり方です。

入れ方

上げ方の例

公式のインストーラー

nodejs.org から同じ系統の最新の版を入れ直す

Homebrew

brew upgrade node(node@22 などで入れたならその名前で)

nvm

nvm install 22 で最新の22系を入れ、nvm alias default 22

Volta

volta install node@22

fnm

fnm install 22 のあと fnm default 22

ライブラリの同梱

そのライブラリを上げる(例:pip install -U playwright)

Docker

ベースのイメージを取り直して作り直す

nvm で新しい版を入れると、前の版に入れていたグローバルのパッケージ(npm i -g で入れたもの)は引き継がれません。nvm install 22 --reinstall-packages-from=current のように指定するか、入れ直します。

どの系統を選ぶか

系統を移るかどうかは、今の系統の残りの期間で決めます。

  • 22.x:サポートは2027年4月末まで。今回は 22.23.4 に上げ、半年以内に24か26へ移る計画を立てる
  • 24.x:2028年4月末まで。10月20日から保守期間に入ったので、大きな新機能は入らないが、修正は続く
  • 26.x:10月28日の 26.13.0 で LTS になり、2029年4月末まで。26.13.0 は 26.12.1 から LTS の表示を変えただけなので、今回の修正も入っている
  • 20・23・25:今回の修正が出ないので、上の3つのどれかへ移る

なお 26.13.0 の公式の案内には、Linux の公式バイナリが 25 から libatomic に依存するようになったので、22・24 から移るときはディストリビューションによって別に入れる必要がある、と書かれています。

上げた後に忘れやすいこと

  • 常駐の処理を再起動する:版を上げても、動きっぱなしのプロセスは古い版のまま。Qualys も、長く動くサービスの再起動とイメージの作り直しを挙げています
  • 単一実行ファイル(SEA)を作り直す:配っているものは、直った版で作り直さない限り古い Node.js を抱えたまま
  • もう一度同じコマンドで版を見る:PATH の順番で古い版が先に呼ばれていることがあるので、which -a node からやり直す

AI に開発を任せている人が見直すこと

AI に「版を確かめて」と頼むときは、場所も渡す

Claude Code や Codex に「Node.js の版を確かめて」と頼むと、たいていは node -v を1回打って終わります。私たちの例のように、同梱の node は node -v には出てきません。頼むときは「PATH・版の管理ツール・ライブラリの同梱・Docker の4か所を見て、見つかった node の版を全部表にして」と、場所まで指定すると取りこぼしが減ります。

npm audit では Node.js 本体の脆弱性は出てこない

AI に「脆弱性がないか見て」と頼むと、npm audit を走らせることがよくあります。ただ npm audit が見るのは、package.json で入れたパッケージ(依存関係)の脆弱性です。Node.js 本体の版は見ません。今回の10件は本体の中の問題なので、npm audit の結果がきれいでも、Node.js が古ければ影響を受けます。

本体の中の部品の版は、次の1行でまとめて見られます。

node -p "process.versions"

ここに出る openssl・undici・ares が、今回の更新で上がった部品です。依存関係は npm audit、本体は node -v と process.versions、と見る場所を分けて覚えておくと、取りこぼしが減ります。

Express で API を作ってもらったなら、本文の展開を見る

Express 5 で作った API が、圧縮されたリクエストの本文を受ける必要があることはあまりありません。版を上げたうえで、必要がなければ body-parser の inflate を false にしておくと、Brotli の脆弱性と同じ種類の問題が今後見つかったときにも、入口を1つ減らせます。

常時動かしている機械の版の見直しを、仕組みにする

私たちの Mac mini が2回分の更新を取りこぼしていたのは、「動いているから触らない」が続いたためです。Node.js のセキュリティ更新は、ここ1年で見ても数か月おきに出ています(配布一覧では2026年1月・3月・6月・7月・10月に「security」の印)。私たちは、ニュースを見たときに思い出すのではなく、版を見るコマンドを定期処理の一部にして、古い版が残っていたら知らせる形に寄せていくつもりです。

証明書の件とあわせて、Mac のほかの道具も確かめたい場合は、こちらの記事が参考になります。

eMudhra証明書の鍵漏えい|Macのcurlを確かめて直す
Claude CodeeMudhra証明書の鍵漏えい|Macのcurlを確かめて直す

Playwright をブラウザ操作の自動化に使っている場合は、道具の選び方をこちらでまとめています。

ブラウザ自動化|Playwrightとbrowser-use比較
Claude Codeブラウザ自動化|Playwrightとbrowser-use比較

Web サイトを運営している方は、PHP で同じ型の問題が出たときの対応も参考になります。

php2shellとは|PHPの脆弱性でサイト運営者が今やること

よくある質問

Q. Node.js を使ったアプリを作っていなければ関係ありませんか

自分でアプリを作っていなくても、開発用の道具やライブラリが Node.js を使っていることがあります。私たちの Playwright のように、自分で Node.js を入れた覚えがなくても中に入っていることがあるので、一度探してみることをおすすめします。

Q. 22.23.4 より新しい 22 系が出ていたら、そちらでいいですか

はい。直った版「以降」であれば、同じ系統の最新を入れて構いません。24 系では10月27日に 24.22.2 が出ています。

Q. ブラウザの中で動く JavaScript も対象ですか

いいえ。今回の脆弱性は Node.js 本体のもので、Chrome などのブラウザの中で動く JavaScript とは別です。

Q. すぐに版を上げられない場合はどうすればいいですか

Qualys は、信頼できない Brotli のデータを展開しない・dns.resolve* の代わりに dns.lookup を使う・TLS でつなぐ前に IP の書き方を正規化する・信頼できないサーバーには keep-alive を切る、を一時しのぎとして挙げています。ただし同時に「これで未修正のランタイムが安全になるわけではない」とも書いています。上げるまでのつなぎと考えてください。

まとめ

  • Node.js は2026年10月21日に、22・24・26 系で脆弱性10件(High 4件)を直した
  • 直った版は 22.23.4・24.22.1・26.12.1。20・23・25 系には出ないので、対象の系統へ移る
  • いちばん重い Brotli の脆弱性は、fetch() や Express 5 の既定の動きからも届きうる
  • 私たちの Mac mini では、PATH の v22.23.1 と、Playwright が同梱する v24.14.1 の2本が直る前の版だった
  • 確かめる場所は PATH・版の管理ツール・ライブラリの同梱・Docker の4か所。上げた後は再起動と作り直しまで

株式会社Fyveでは、AI に開発や業務を任せるときの環境の整え方も含めて、実際に試した結果をもとに発信しています。

この記事を読んでいるあなたへ無料プレゼント

Claudeのこの5つの設定、今すぐ見直した方がいい

共有・学習・入力・権限・委任。事故が起きるのはこの5つだけ(全28ページ)

2026年7月、Claudeの共有チャットがGoogle検索から読める状態になっていました。原因は設定そのものではなく、自分が過去に共有したものを覚えていないことでした。共有リンクの棚卸しから、学習をオフにしても残る例外条項、Claude Codeの権限モードまで、今日30分で確認できる形にまとめています。

  • 見落としやすい共有リストは3つある(3つ目は画面の下)
  • 学習をオフにしても残る、公式の例外条項
  • 権限モード6つの違いと、Shift+Tabでの切り替え方
  • 私が実際に禁止しているコマンド23行を全文公開

メールアドレス登録で他にも様々な資料を閲覧できます

「GPT-6.1 Terra」を、実務で比べてみた。仕事でAIを使う人が「絶対に」知っておくべき Claude Codeスキル TOP10「Sonnet 5.5」を、実務で比べてみた。Codexを使い始める前に、「絶対に」見直してほしい5つのこと「Opus 5.5」を、実務で比べてみた。Jevで得する仕事、損する仕事Astra と Fable 5.1、ベンチマークでは分からない「使い分け」。Fable 5.1、賢さは「どこ」に出たか。Workにしかできない仕事は、2つだけ+10

PDF 19点・合計499ページ + すぐ使えるzip素材 3点

どれも登録後の受け取りページから、まとめてダウンロードできます。

毎週配信の無料ニュースレター「AIネイティブ超研究」の購読特典です。メール登録後すぐ、受け取りページのご案内が届きます。そこにはこの資料に加えて、過去の特典もすべてまとめて置いてあります。あわせて、AI活用に関するお知らせやお役に立てそうなご案内をお送りすることがあります。解除はいつでも1クリック。

← 記事一覧に戻る

御社の業務に合わせたClaude Code導入支援

「AIツールを導入したが、現場で使われない」を終わらせる。
業務課題のヒアリングから設計、ハンズオン実践、運用定着まで一貫して支援します。

無料AI活用診断を受ける料金とサービス一覧を見る →
© 2025 Fyve Inc. All rights reserved.