仕事

【Node.js脆弱性】Claude Codeユーザーは関係ある?自分のMacで確認・アップデートしてみた(2026年10月)

Node.jsの脆弱性とClaude Code

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で確かめてアップデートするところまでやってみた。

どうも、スニーキーです。

まずは結果を見てほしい

自分の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公式の修正版

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で確認

まずは今のバージョンを確認した。ターミナルでこれを打つだけ↓

node -v
which -a node

俺のMacは v24.11.1 だった。修正版の24.22.1より古い。nvm(Node.jsのバージョンを切り替えるツール)で入れたものだった。

which -a node は、Node.jsがどこに入っているかを全部出してくれる。Homebrewとnvmの両方に入っている人もいるので、念のため見ておいたほうがいい。

Claude Codeは何で動いているのか

何がNode.jsで動いているか

ここが一番気になっていたところ。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でアップデート

アップデートは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は別

公式devcontainerはNode.js 20のまま

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に変えても動いた

じゃあ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のときもそうだったけど、「自分は関係あるの?」は、結局自分の環境を調べないと分からない。

誰かの助けになれば嬉しい。

-仕事