Node.jsの脆弱性10件(2026年10月)|26.12.1・24.22.1・22.23.4に更新、バージョンの確かめ方と更新のしかた

Node.jsの脆弱性10件のアイキャッチ。修正バージョンは26.12.1・24.22.1・22.23.4。node -v でバージョンを確かめる、26.xは26.12.1・24.xは24.22.1・22.xは22.23.4に上げる、20.x以前と25.xには修正が出ないので24.x以降へ移る、DockerイメージとSEAは更新したNode.jsで作り直す、の4つを示す図

Node.jsは、2026年10月21日(水)付けのセキュリティリリースで、脆弱性10件を直した26.12.1・24.22.1・22.23.4を出しました。26.x・24.x・22.xを使っている人は、node -v でバージョンを確かめ、これより古ければ直ったバージョンに上げてください。サポートが終わった20.x以前には修正が出ないので、24.x以降へ移ります。

目次

結論:26.12.1・24.22.1・22.23.4に上げる

  • 直ったバージョン:26.xは 26.12.1、24.x(LTS)は 24.22.1、22.x(LTS)は 22.23.4
  • 直した脆弱性:10件。深刻度はHigh 4件・Medium 3件・Low 3件で、各リリースラインでいちばん高いのはHighです。Brotliの展開処理の不具合(外からコードを実行されるおそれ)や、TLSの証明書のホスト名の確かめをすり抜けられる不具合を含みます
  • 20.x以前:サポートが終わっていて、修正は出ません。Node.jsは、サポートが終わったバージョンはセキュリティリリースのたびに必ず影響を受けるとしています
  • Dockerイメージ:公式イメージ(node)には26.12.1・24.22.1・22.23.4のタグが出ています。イメージを作り直してコンテナを入れ替えます
  • 単一実行ファイル(SEA):Node.js本体のコピーに中身を埋め込んで作るので、更新したNode.jsで作り直します

自分のNode.jsのバージョンを確かめる

node -v
出てきたバージョン やること
v26.x(26.12.0以前) 26.12.1に上げる
v24.x(24.22.0以前) 24.22.1に上げる
v22.x(22.23.3以前) 22.23.4に上げる
v25.x・v20.x・v18.x以前 サポートが終わっていて修正は出ない。24.x以降へ移る
v26.12.1・v24.22.1・v22.23.4 直ったバージョンなので、そのままでよい

Node.jsのリリース予定では、20.xは2026年4月30日、25.xは2026年6月1日にサポートが終わっています。24.xは10月20日から保守の段階に入り、26.xは10月28日にLTSになる予定です。

直った脆弱性

Node.jsの公式ブログ「Wednesday, October 21, 2026 Security Releases」に載っている10件です。

CVE 内容 深刻度 影響を受けるリリースライン
CVE-2026-105482 dns.resolve が、NUL文字を含む名前を途中で切ってしまう High 26.x・24.x・22.x
CVE-2026-105483 IPアドレスを全角の数字で書くと、TLSの証明書のホスト名の確かめをすり抜けられる High 26.x・24.x
CVE-2026-106069 ホスト名がゆるくIPアドレスとして解釈されると、TLSの証明書のホスト名の確かめをすり抜けられる High 26.x・24.x・22.x
CVE-2026-111497 Brotliの展開処理で範囲外への書き込みが起き、外からコードを実行されるおそれがある High 26.x・24.x・22.x
CVE-2026-105481 keep-aliveの接続で、リクエストを送る前に書かれたレスポンスを処理してしまう Medium 26.x・24.x・22.x
CVE-2026-106072 正しい形でないIPv4のホスト名で、DNS名の証明書がIPアドレスの相手の確かめに使われてしまう Medium 26.x・24.x・22.x
CVE-2026-106074 crypto.randomUUID() と randomInt() の乱数のキャッシュが起動スナップショットやSEAに保存され、どのプロセスでも同じ値がくり返される Medium 26.x・24.x・22.x
CVE-2026-106070 ZIPのヘッダーの確かめに失敗したあと、ZipFileが外から入れられた先頭のデータを返す Low 26.x
CVE-2026-106071 パーミッションモデルで、ワイルドカードの扱いによりファイルへのアクセスが広く許されてしまう Low 26.x
CVE-2026-106073 パーミッションモデルを fs.realpathSync ですり抜けられる Low 26.x・24.x・22.x

このほか、依存するライブラリも更新されています。c-aresは1.34.9(26.x・24.x・22.x)、Undiciは26.xが8.12.2・24.xが7.30.1・22.xが6.29.1、OpenSSLは3.5.9(24.x・22.x)、SQLiteは3.53.4(22.x)です。3つのリリースラインとも、ルート証明書がNSS 3.131.1のものに替わり、止められた公開鍵を含む証明書チェーンをはじくようになりました。eMudhraの中間CA証明書の件への対応で、くわしくはeMudhraの中間CA証明書8枚で秘密鍵がもれた件の記事を見てください。

更新のしかた

nvmで入れている場合

使っているリリースラインの直ったバージョンを入れ、ふだん使うバージョンに切り替えます。24.xの例です(macOS・Linuxのnvmの場合)。

nvm install 24.22.1
nvm alias default 24.22.1
node -v

26.xなら 26.12.1、22.xなら 22.23.4 に置き換えます。WindowsのNVM for Windowsには alias がないので、入れたあと nvm use で切り替えます。

nvm install 24.22.1
nvm use 24.22.1
node -v

公式のインストーラーで入れている場合

nodejs.orgのダウンロードページから、直ったバージョンのインストーラーを取ってきて入れ直します。入れたあと、ターミナルを開き直してバージョンを確かめます。

node -v

Dockerイメージの場合

Dockerfileの FROM を直ったバージョンのタグにして、イメージを作り直します。24.xの例です。

FROM node:24.22.1
docker build --pull -t my-app .

node:24 や node:lts のようなタグを使っている場合も、手元のイメージは古いままのことがあるので、--pull を付けて作り直し、コンテナを入れ替えます。コンテナの中のバージョンは次で確かめられます。

docker run --rm --entrypoint node my-app -v

単一実行ファイル(SEA)・起動スナップショットを使っている場合

SEAは、Node.js本体のコピーにアプリの中身を埋め込んで作ります。Node.jsを更新しただけでは、すでに作ったSEAの中のNode.jsは古いままです。更新したNode.jsで作り直して配り直します。

CVE-2026-106074は、起動スナップショットとSEAに乱数のキャッシュが保存されてしまう不具合です。--build-snapshot で作った起動スナップショットは、作ったときとまったく同じバージョンのNode.jsでないと読み込まれません。更新したNode.jsで作り直します。

よくある質問

20.xのままではだめですか

20.xは2026年4月30日にサポートが終わり、今回の修正は出ません。Node.jsは、サポートが終わったバージョンはセキュリティリリースのたびに必ず影響を受けるとしています。24.x(LTS)か、10月28日にLTSになる予定の26.xへ移ります。

サーバーでNode.jsを使っていなくても関係ありますか

開発用のPCで使っているNode.jsも、同じように影響を受けます。ビルドやテストで使っているNode.js、CIで使っているNode.jsのイメージやバージョンの指定も確かめます。

同じ日のPHPの更新は

PHPも同じころに重大な脆弱性を直したバージョンを出しています。PHPの重大な脆弱性2件と修正バージョン8.5.12・8.4.27・8.3.36・8.2.35の記事を見てください。

参考リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次