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の記事を見てください。

コメント