# Node.jsの2026年10月脆弱性対応：対象バージョンとDocker・Next.jsの更新手順

公開日: 2026-10-25 | 更新日: 2026-10-25 | URL: https://blog.genko.me/nodejs-security-release-2026-10

> Node.jsの2026年10月セキュリティ更新で修正された10件の脆弱性を解説します。22.23.4・24.22.1・26.12.1への更新、Next.jsなどの影響確認、Dockerの再ビルドとCI・本番環境の確認手順を整理します。

Node.jsは2026年10月21日、Brotliの展開処理、TLSの証明書検証など計10件の脆弱性を修正しました。22系は22.23.4、24系は24.22.1、26系は26.12.1へ更新してください。Next.js・Astro・Nuxt・SvelteKitも、ビルドやサーバーをNode.jsで実行していれば確認対象です。[公式発表](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)

## Node.jsの対象バージョンと修正版は？

今回の修正を含むバージョンは次のとおりです。まず現在使っている系統の修正版へ上げ、メジャー更新が必要かは別に判断します。

| 使用中の系統 | 今回の修正版 | 個別のリリース情報 |
| --- | --- | --- |
| 22.x | 22.23.4 | [22.23.4](https://nodejs.org/en/blog/release/v22.23.4/) |
| 24.x | 24.22.1 | [24.22.1](https://nodejs.org/en/blog/release/v24.22.1/) |
| 26.x | 26.12.1 | [26.12.1](https://nodejs.org/en/blog/release/v26.12.1/) |

後続版が出ている場合は、その系統の公式リリース情報も確認します。表にないサポート終了版を「対象外だから安全」と判断せず、サポート中の系統へ移行してください。

## 2026年10月に修正されたCVE一覧

重要度はNode.js公式発表の分類です。「対象系統」は修正前の該当系統を指し、すべてのアプリで攻撃が成立するという意味ではありません。各CVEの登録情報は末尾に掲載しています。

| CVE | 重要度 | 対象系統 | 内容 | 影響する使い方 |
| --- | --- | --- | --- | --- |
| CVE-2026-105482 | High | 22・24・26 | DNS名がNUL文字で切られる | ホスト名を検証後、`dns.resolve*()`などで解決する処理 |
| CVE-2026-105483 | High | 24・26 | 全角数字などのIPで証明書照合を迂回 | 非ASCIIのIP表記で接続するTLSクライアント |
| CVE-2026-106069 | High | 22・24・26 | 接続先と証明書照合先のIPが食い違う | 先頭ゼロ付きIPv4を扱うTLSクライアント。OSにも依存 |
| CVE-2026-111497 | High | 22・24・26 | Brotli展開時の境界外書き込み | 攻撃者由来のBrotliデータを`node:zlib`で展開する処理 |
| CVE-2026-105481 | Medium | 22・24・26 | リクエスト送信前の応答を受理 | HTTP Agentでkeep-alive接続を再利用するクライアント |
| CVE-2026-106072 | Medium | 22・24・26 | 数字のDNS SANでIP宛て証明書を認証 | 非標準IPv4表記を受け付ける環境のTLSクライアント |
| CVE-2026-106074 | Medium | 22・24・26 | 乱数キャッシュが起動後のプロセス間で重複 | 乱数生成を実行して作った起動スナップショットやSEA |
| CVE-2026-106070 | Low | 26 | 不正ZIPで別のバイト列を返す | `zlib.ZipFile`で該当ZIPを検査・読み出す処理 |
| CVE-2026-106071 | Low | 26 | ワイルドカードのファイル権限を過剰付与 | 特定のワイルドカード設定を持つPermission Model |
| CVE-2026-106073 | Low | 22・24・26 | `fs.realpathSync()`の権限確認が不足 | Permission Modelで読み取り範囲を制限する処理 |

### Brotliの脆弱性はどのアプリに影響する？

CVE-2026-111497では、細工されたBrotliデータの展開によるメモリ破壊から、クラッシュ、情報漏えい、リモートコード実行に至る可能性があります。確認するのは、受信した圧縮リクエスト、アップロード、外部HTTP応答などが、直接または依存ライブラリ経由でBrotliデコーダーへ届く経路です。

Brotli形式のレスポンスを圧縮して配信するだけの経路と、信頼できないデータを展開する経路は分けて調べます。フレームワーク名だけで攻撃成立を判断せず、ミドルウェアやHTTPクライアントの動作を確認してください。[BrotliのCVE登録情報](https://www.cve.org/CVERecord?id=CVE-2026-111497)

### HTTPS通信や特殊な起動設定も確認する

TLS関連の3件は、接続先IPの表記と証明書の照合に関わる問題です。公開HTTPSサーバーとして待ち受けるだけでなく、外部APIや利用者指定URLへ接続するクライアント側を確認します。CVE-2026-106072は、信頼するCAが発行した数字のDNS SANを持つ証明書と、そのIP表記を受け付けるリゾルバーが必要です。

HTTP Agentの問題もクライアント側の接続再利用です。乱数の問題は、乱数キャッシュを含むユーザー作成の起動スナップショットや、`useSnapshot`を使う単一実行ファイルが条件です。通常のビルド成果物やDockerイメージの保存を、その起動スナップショットと混同しないでください。

## 自分のアプリが影響を受けるか確かめる

1. **実行環境ごとにバージョンを確認します。** 開発PCだけでなく、サーバー、CIのセットアップ直後、ビルド用コンテナで調べます。
2. **設定ファイルを確認します。** `.nvmrc`、`.node-version`、`package.json`の`engines`やVolta設定、CIのNode指定、Dockerfileの`FROM`を確認します。
3. **本番ランタイムを確認します。** サーバーレスやPaaSでは、ビルド用と実行用のNode設定、提供元の更新案内を別々に確認します。
4. **入出力の経路を確認します。** Brotli展開、外向きHTTPS、HTTP Agent、DNS解決、起動スナップショット、Permission Modelの利用を調べます。

```bash
node -v
node -p 'JSON.stringify({node: process.version, executable: process.execPath, dependencies: process.versions}, null, 2)'
```

コンテナでは、自分のコンテナ名へ置き換えて確認します。

```bash
docker exec YOUR_CONTAINER node -v
```

`package-lock.json`などのロックファイルは、Node.js本体の実行バージョンを固定しません。`engines`もインストール済みのNodeを自動で置き換えるものではありません。常駐プロセスが起動したNodeと、別途起動したシェルのNodeが違う場合もあるため、デプロイしたプロセスの起動ログでも`process.version`を確認します。[Node.jsのプロセス情報](https://nodejs.org/api/process.html#processversions)

## Node.jsを更新する方法

### nvm・Volta・fnmを使っている場合

次は24系の例です。すでに導入している管理ツールの手順だけを選び、22系・26系なら対象の修正版へ読み替えます。

```bash
nvm install 24.22.1
nvm use 24.22.1
node -v
```

Voltaでは、プロジェクトの指定も更新します。

```bash
volta install node@24.22.1
volta pin node@24.22.1
node -v
```

fnmでは次のように切り替えます。

```bash
fnm install 24.22.1
fnm use 24.22.1
node -v
```

`.nvmrc`や`.node-version`も、チームの運用に合わせて更新します。開発シェルの切り替えだけで作業を終えず、CIやサービスの起動設定まで揃えてください。

### Dockerのnodeイメージを更新する場合

公式イメージには`node:22.23.4`、`node:24.22.1`、`node:26.12.1`が掲載されています。次は24系の例です。[公式タグ一覧](https://hub.docker.com/_/node)

```dockerfile
FROM node:24.22.1-bookworm-slim
```

固定した古いパッチタグやdigestを使う場合は、その指定を更新します。`node:24`のような追従タグでも、すでにあるアプリイメージや稼働中コンテナは自動では変わりません。ベースイメージを再取得してアプリを再ビルドし、再デプロイします。

```bash
docker build --pull -t your-app:node24-security .
```

マルチステージビルドでは、ビルド用・実行用の両方の`FROM`を確認します。再デプロイ後は各レプリカでバージョンを確認してください。

### OSパッケージ・PaaSを使っている場合

OSのパッケージは配布元が修正をバックポートする場合があるため、番号の比較だけで判断せず、配布元のセキュリティ情報とパッケージの修正履歴を確認します。実際に使うバイナリの経路も調べます。

PaaSではランタイムの選択と提供元の修正適用状況を確認し、必要な再デプロイを行います。ビルド・テスト後、公開ページ、API、外部HTTPS接続、圧縮データを扱う機能を確認し、再起動したプロセスのバージョンを記録します。

今回の更新には、c-ares・Undici・CA証明書（22・24・26系）、OpenSSL（22・24系）、SQLite（22系）の更新も含まれます。[個別リリース情報](https://nodejs.org/en/blog/release/v24.22.1/)も確認してください。

## 静的サイトならNode.jsの更新は不要？

HTML・CSS・JavaScriptを静的ファイルとして配信し、その配信経路でNode.jsを動かさなければ、公開ページへのリクエストがNodeの処理へ届く経路を減らせます。ただし、CI、ビルド、プレビュー、API、SSRには別の実行環境が残ります。

[genko.me](https://genko.me/)のようなCMSからビルド時に記事を取得する構成でも、ビルドを実行する環境のNode.jsは更新が必要です。構成例は[Astroの導入ガイド](https://docs.genko.me/frameworks/astro/getting-started)と[AstroでCMSブログを作る記事](https://blog.genko.me/astro-blog-cms)、配信層を分ける考え方は[PHP2Shellと静的サイト構成](https://blog.genko.me/php2shell-static-site-architecture)を参照してください。

## よくある質問

### Node.jsの2026年10月の脆弱性はどのバージョンが対象ですか？

公式発表は22.x・24.x・26.xを対象とし、修正版は22.23.4・24.22.1・26.12.1です。全角数字IPのTLS問題は24・26系、ZIPとワイルドカード権限の問題は26系が対象です。

### Dockerのnodeイメージは更新が必要ですか？

修正前のNodeを含むイメージなら更新が必要です。固定タグやdigestを見直し、追従タグでもベースの再取得、アプリの再ビルド、再デプロイを行います。

### Next.jsのアプリも影響を受けますか？

Node.jsで実行するビルドやサーバーは確認対象です。どのCVEが実際に成立するかは、Brotli展開や外部通信などの処理経路で変わります。

### npm updateだけでNode.jsの脆弱性は直りますか？

Node.js本体の更新にはなりません。ランタイムを更新し、依存関係とアプリの検証も行ってください。

## 出典

- [Node.js：2026年10月のセキュリティ発表](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)
- [22.23.4](https://nodejs.org/en/blog/release/v22.23.4/)・[24.22.1](https://nodejs.org/en/blog/release/v24.22.1/)・[26.12.1](https://nodejs.org/en/blog/release/v26.12.1/)
- CVE登録情報：[105482](https://www.cve.org/CVERecord?id=CVE-2026-105482)、[105483](https://www.cve.org/CVERecord?id=CVE-2026-105483)、[106069](https://www.cve.org/CVERecord?id=CVE-2026-106069)、[111497](https://www.cve.org/CVERecord?id=CVE-2026-111497)、[105481](https://www.cve.org/CVERecord?id=CVE-2026-105481)、[106072](https://www.cve.org/CVERecord?id=CVE-2026-106072)、[106074](https://www.cve.org/CVERecord?id=CVE-2026-106074)、[106070](https://www.cve.org/CVERecord?id=CVE-2026-106070)、[106071](https://www.cve.org/CVERecord?id=CVE-2026-106071)、[106073](https://www.cve.org/CVERecord?id=CVE-2026-106073)
- [Docker公式Nodeイメージ](https://hub.docker.com/_/node)・[nodejs/docker-node](https://github.com/nodejs/docker-node)・[Docker buildのpullオプション](https://docs.docker.com/reference/cli/docker/buildx/build/#pull)
- [nvm](https://github.com/nvm-sh/nvm#usage)・[Volta install](https://docs.volta.sh/reference/install)・[Volta pin](https://docs.volta.sh/reference/pin)・[fnm](https://github.com/Schniz/fnm#usage)
- [Node.js process](https://nodejs.org/api/process.html#processversions)・[npm engines](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#engines)
