
PHPの「php2shell」騒ぎがやっと落ち着いたと思ったら、同じ10月21日にNode.jsでも脆弱性の修正が出ていた。
Xを見ていたら「PHPに続きNode.jsも危ない。特にClaude Codeを日頃使っている人はガッツリ関係します」という投稿が、1,000件以上ブックマークされていた。俺は毎日Claude Codeを使っているので、さすがに気になった。
でも、Claude Codeって本当にNode.jsで動いているんだっけ?
ということで今回は、2026年10月のNode.jsの脆弱性について、Claude Codeを使っている人に本当に関係あるのかを、自分のMacで確かめてアップデートするところまでやってみた。
どうも、スニーキーです。
まずは結果を見てほしい

- Claude Code本体:Node.jsでは動いていなかった(中身はBunが組み込まれたアプリ)。npmで入れても同じだった
- Codex CLI:MacのNode.jsで動いていた → 関係あり
- MCPサーバー(npxで起動するもの):MacのNode.jsで動く → 関係あり
- Claude Code公式のDocker開発環境(devcontainer):サポートが終わったNode.js 20のまま → 関係あり
つまり「Claude Codeを使っている人は関係ある」は、Claude Code本体の話としては違うけど、まわりで使っているものはだいたい関係あるってこと。
2026年10月のNode.jsの脆弱性とは

Node.jsは2026年10月21日に、セキュリティの修正版を出した。(参照:https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)
- 修正された脆弱性は10件(重要度「高」が4件、「中」が3件、「低」が3件)
- 一番ヤバいのは、圧縮データ(Brotli)を展開する部分の不具合で、外からプログラムを動かされる可能性があるもの
- 修正版は 22.23.4 / 24.22.1 / 26.12.1。回避策は書かれていない
- Node.js 20は2026年4月30日でサポートが終わっているので、修正は来ない。公式も「サポートが終わったバージョンは、セキュリティリリースのたびに常に影響を受ける」と書いている
自分のMacのNode.jsを確認する

まずは今のバージョンを確認した。ターミナルでこれを打つだけ↓
node -v
which -a node
俺のMacは v24.11.1 だった。修正版の24.22.1より古い。nvm(Node.jsのバージョンを切り替えるツール)で入れたものだった。
which -a node は、Node.jsがどこに入っているかを全部出してくれる。Homebrewとnvmの両方に入っている人もいるので、念のため見ておいたほうがいい。
Claude Codeは何で動いているのか

ここが一番気になっていたところ。Claude Codeの本体のファイルを調べてみた↓
file ~/.local/share/claude/versions/*
結果は、Node.jsのスクリプトではなく、Macのアプリ(Mach-O形式)だった。中の文字列を調べると「Bun v1.4.4」と出てきた。Bunは、Node.jsとは別のJavaScriptの実行環境だ。
つまり今のClaude Codeは、Bunを中に組み込んだアプリとして動いていて、MacのNode.jsは使っていない。
「npmで入れた人は違うのでは?」と思ったので、Dockerの中でnpmから入れたClaude Codeも調べた。こっちも実体は bin/claude.exe というアプリで、中身は同じくBunだった。npmは入れるときに使うだけらしい。
一方で、同じMacに入っているCodex CLIは、ファイルの1行目が #!/usr/bin/env node だった。これは「MacのNode.jsで動かします」という意味。こっちはしっかり関係ある。
もう一つ、Claude Codeで使うMCPサーバー。俺のプロジェクトの1つでは npx shadcn@latest mcp で起動していた。npxで起動するMCPサーバーは、MacのNode.jsで動く。
nvmでNode.jsをアップデートする

アップデートはnvmなら1行でできる↓
nvm install 24 --reinstall-packages-from=24.11.1
nvm alias default 24
--reinstall-packages-from を付けると、前のバージョンに入れていたパッケージ(俺の場合はCodex CLIなど)を新しいバージョンにも入れ直してくれる。これで v24.22.1 になった。
Codex CLIもそのまま動いた。古い24.11.1も残しておいたので、何かあったら nvm use 24.11.1 で戻せる。
ちなみに、ターミナルを開き直さないと古いバージョンのままのことがある。アップデートしたら一回ターミナルを開き直して、node -v でもう一度確認したほうがいい。
落とし穴:Dockerの中のNode.jsは別

Macを更新しても、Dockerのコンテナの中のNode.jsは変わらない。コンテナはそれぞれ自分のNode.jsを持っているからだ。
調べたら、前に作ったClaude Codeの練習用プロジェクトのDocker環境が Node.js 20.20.0 だった。サポートが終わっているバージョンだ。
しかもこれ、Claude Code公式の開発環境(devcontainer)のファイルをそのまま使っていた。公式のファイルを今見ても、1行目が FROM node:20 のままだった(最終更新は2025年8月)。(参照:https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile)
コンテナの中のNode.jsは、こうやって確認できる↓
docker run --rm イメージ名 node -v
公式のdevcontainerをNode.js 24に変えて試した

じゃあNode.js 24に変えたら動くのか?公式のファイルの1行目だけを FROM node:24 に変えて、ビルドしてみた。
結果、コンテナの中は Node.js 24.22.1 になって、Claude Code(2.1.310)も普通に動いた。変えたのは1行だけだ。
公式のdevcontainerを使っている人は、自分のプロジェクトのファイルを node:24 に変えて、作り直すのがいいと思う。
まとめ:Claude Codeを使っている人がやること

node -vでMacのNode.jsを確認して、22.23.4 / 24.22.1 / 26.12.1 より古ければ更新する- Codex CLIやnpxのMCPサーバーなど、Node.jsで動くツールも使っているなら、Macの更新で一緒に対策できる
- Dockerやdevcontainerは、中のNode.jsを別に確認する。Node.js 20以下ならイメージを変えて作り直す
「Claude Codeを使っているからヤバい」は、本体については違った。でも、Claude Codeのまわりで使っているものは、だいたいNode.jsで動いている。php2shellのときもそうだったけど、「自分は関係あるの?」は、結局自分の環境を調べないと分からない。
誰かの助けになれば嬉しい。