- セキュリティ
Node.js 2026年1月のセキュリティリリース:8件の脆弱性と、いま確認すべきこと
2026年1月13日、Node.jsのセキュリティリリースが公開されました。当初は2025年12月中旬の予定でしたが延期され、年明けの公開になっています。20.x / 22.x / 24.x / 25.xのすべてのサポート中ラインが対象で、修正された脆弱性は8件です。Next.jsで作ったWebサイトや、サーバー側で動く業務ツールの多くはNode.js上で動いているため、自社サービスへの影響を確認しておく価値があります。
何が起きたのか
公式アドバイザリによると、今回の内訳は深刻度「High」が3件、「Medium」が4件、「Low」が1件です。修正済みのバージョンは次のとおりです。
| リリースライン | 修正版 | 位置づけ(2026年1月時点) |
|---|---|---|
| 20.x | 20.20.0 | Maintenance LTS(2026年4月30日にサポート終了予定) |
| 22.x | 22.22.0 | Maintenance LTS |
| 24.x | 24.13.0 | Active LTS |
| 25.x | 25.3.0 | Current |
主な脆弱性は以下です。
- CVE-2025-55131(High):
vmモジュールのタイムアウトで処理が中断されたとき、Buffer.allocなどが初期化されていないメモリを返すことがあり、プロセス内の秘密情報が漏れる可能性がある。 - CVE-2025-55130(High):細工した相対シンボリックリンクで、パーミッションモデルの
--allow-fs-read/--allow-fs-writeの制限をすり抜けられる。 - CVE-2025-59465(High):不正なHTTP/2のHEADERSフレームを受け取ると、処理されないエラーでプロセスが落ちる(リモートからのサービス停止)。
- CVE-2025-59466(Medium):
async_hooksが有効な状態で深い再帰が起きると、スタックオーバーフローをtry/catchで捕捉できず、プロセスが即終了する。
このほか、TLSのコールバック内で例外が出た場合のクラッシュ(CVE-2026-21637)、パーミッションモデル関連の小さな抜け道などが修正されています。依存ライブラリでは、c-aresが1.34.6、undiciが6.23.0 / 7.18.0に更新されました。
なぜ重要か
8件のうちいくつかは、実験的機能であるパーミッションモデル(--allow-fs-readなど)を使っている場合にだけ関係します。一般的なWebアプリでこの機能を使っているケースは多くないので、この部分は冷静に見てよいと思います。
一方で、私が重要だと考えているのはCVE-2025-59466です。Node.js公式は、この件について別途解説記事を出しています。それによると、AsyncLocalStorageを内部で使うReact Server ComponentsやNext.jsは、Node.js 20.x / 22.x以前で影響を受けます。24.x以降はAsyncLocalStorageの実装が変わっているため、この経路では影響を受けないとされています。また、Datadog、New Relic、OpenTelemetryなどのAPM(監視)ツールがasync_hooks.createHook()を直接使っている場合は、バージョンに関係なく影響を受け得るとのことです。
つまり、Next.jsで作ったサイトや管理画面を22.xで動かしている、というごく普通の構成が対象に入ります。攻撃者が再帰の深さを操作できる入力(深くネストしたJSONなど)を送れれば、1回のリクエストでサーバーを落とせる可能性がある、というのが公式の説明です。
もう1点、Node.js 20.xのサポート終了が2026年4月30日に迫っていることも見逃せません。今回は20.xにも修正版が出ましたが、5月以降は修正が出なくなります。今回の更新作業を、24.xへの移行計画を立てるきっかけにするのが現実的だと私は見ています。
実務での影響・対応
まず自社の実行環境のバージョンを確認する
最初にやることは、本番で動いているNode.jsのバージョンを把握することです。サーバーに入れる場合はnode -vで確認できます。レンタルサーバーやPaaSを使っている場合は、管理画面やビルドログで実行バージョンを確認します。
意外と見落としやすいのが、package.jsonのengines、.nvmrc、DockerfileのFROM node:22のような指定です。ローカルとCI、本番で別々のバージョンが動いていることは珍しくありません。
node -v
grep -rn "node:" Dockerfile* .github/workflows 2>/dev/null
cat .nvmrc package.json | grep -n "node"
修正版に上げる
各ラインの修正版(20.20.0 / 22.22.0 / 24.13.0 / 25.3.0)以上に更新します。Dockerイメージをnode:22のようなメジャー指定で使っている場合は、イメージを再取得してビルドし直さない限り古いままです。キャッシュされたイメージで動き続けていないか確認してください。
VercelなどのマネージドなPaaSでは、パッチバージョンは基盤側で更新されることが多いと見ています(各社のドキュメントで確認してください)。ただし、メジャーバージョン(20.xか22.xか24.xか)はプロジェクト設定で選ぶ形が一般的なので、設定が古いままになっていないかは確認しておくべきです。
すぐに上げられない場合の暫定策
公式は、すぐに更新できない場合の考え方も示しています。
- 再帰の深さを制限する。外部入力によって再帰が深くなる処理(ネストしたJSONの解析など)には、深さの上限を設ける。
- TLSソケットにエラーハンドラーを付ける。CVE-2025-59465は、セキュアソケットにエラーハンドラーがないアプリで主に問題になるとされています。
- 入力サイズを制限する。リクエストボディの大きさやネストの深さに上限を設ける。
どれも「ランタイムが例外から回復してくれる」前提に頼らない設計です。公式も、スタック枯渇からの回復は可用性の根拠にすべきではない、という立場を明確にしています。これは今回に限らず、AIが生成したコードを取り込むときにも意識したい点です。私の経験では、AIは再帰で素直に書くことが多いので、外部入力を扱う部分では深さの上限を確認するようにしています。
中小企業の担当者が確認すべきこと
開発を外部に委託している場合は、次の3点を委託先に確認すれば十分です。
- 本番で動いているNode.jsのバージョン
- 今回の修正版への更新予定日
- 20.xを使っている場合、4月30日のサポート終了までの移行計画
「うちはNode.jsを使っているのか」自体が分からないこともあると思います。Next.js、Nuxt、Express、多くの業務用のバッチ処理などはNode.js上で動いています。分からなければ、それも含めて聞いてしまうのが早いです。
まとめ
2026年1月のNode.jsセキュリティリリースは、8件の脆弱性修正を含むものでした。パーミッションモデル関連は影響範囲が限られますが、async_hooksのスタックオーバーフロー問題はNext.jsやAPMツールを使う一般的な構成にも関係します。
やるべきことはシンプルで、実行バージョンを確認し、修正版に上げることです。あわせて、2026年4月30日にサポートが終わる20.xを使っているなら、24.xへの移行を今のうちに計画しておくことをおすすめします。
参考リンク
あわせて読みたい
PHPに認証不要のリモートコード実行の脆弱性「PHP2Shell」:WordPressを使う事業者と開発者がすべきこと
2026年10月21日、PHP本体の深刻な脆弱性2件(CVE-2026-109618、CVE-2026-109619)が修正されました。すでに悪用が確認されています。WordPressの更新だけでは防げないため、サーバー側の対応が必要です。
npm v12でインストールスクリプトが既定で無効に:サプライチェーン攻撃への備えと移行準備
GitHubがnpm v12の破壊的変更を予告しました。依存パッケージのインストールスクリプトが既定で実行されなくなります。背景と、今のうちに進めておきたい準備をまとめます。
Windowsでライブ変換を試してみた:ニューラル変換IME「Setsuna」と次世代の日本語入力
Macのようなライブ変換をWindowsでも使いたくて、個人開発のニューラル変換IME「Setsuna」を試しました。使ってみた感想と、ほかのリアルタイム変換IME、Copilot Keyboardを含む今後の展望をまとめます。