Next.js Server Functions の DoS 脆弱性 2026 - RSC デシリアライズ由来 CVE への対処

Next.js Server Functions の DoS 脆弱性 2026 - RSC デシリアライズ由来 CVE への対処

作成日:
読了:14
更新日:

概要

2026年に入ってから、React Server Components(RSC)と Next.js の Server Functions を狙うデシリアライズ由来のサービス拒否(DoS)脆弱性が相次いで公表されました。中心となるのが CVE-2026-23864(2026年1月26日公表、CVSS 7.5)と CVE-2026-23869(2026年4月8日公表、CVSS 7.5)です。

いずれも認証不要で、App Router の Server Function エンドポイントに細工した HTTP リクエストを送るだけで、サーバーの CPU やメモリを過剰に消費させられます。攻撃者がリクエストを繰り返せば、DoS 状態を継続させることが可能です。

これらは2025年12月に公表された RCE(React Server Components の RCE「React2Shell」CVE-2025-55182)と同じデシリアライズ面から派生した、後続の DoS 系脆弱性です。本記事ではこの関係を軸に、影響有無の確認方法と対処を整理します。

まず結論: 影響有無と上げるべき版

Next.js の App Router を使っていて、Server Functions(Server Actions)を有効にしている場合は影響を受ける可能性が高いと考えてください。対処は「とにかく最新のパッチ版まで上げる」です。

  • CVE-2026-23869(CPU 過剰消費)の修正版は Next.js 15.5.1516.2.3 です。影響範囲は >=13.0.0 かつ 15.5.15 未満、および >=16.0.0 かつ 16.2.3 未満です。
  • CVE-2026-23864(メモリ枯渇・サーバークラッシュ)は Next.js 13.x / 14.x / 15.x / 16.x が影響を受けます。Vercel の告知では修正版として 15.0.8 / 15.1.12 / 15.2.9 / 15.3.9 / 15.4.11 / 15.5.10 / 16.0.11 / 16.1.5 などが挙げられています。
  • 13.x・14.x はパッチ提供の対象外です。これらのバージョンを使っている場合は、サポート対象の 15.x / 16.x へメジャーアップグレードする必要があります。

CVE-2026-23864 と CVE-2026-23869 の両方をまとめて塞ぐには、2026年4月時点の最新パッチである Next.js 15.5.15 以降、または 16.2.3 以降へ上げるのが確実です。React 側も、対応する 19.0.4 / 19.1.5 / 19.2.4 以降が安全とされています。

WARNING

バージョン番号は移り変わります。ここに書いた数値はあくまで2026年4月時点で確認できたものです。適用前に必ず Vercel changelogNext.js の blogreact.dev のアドバイザリ で最新の修正版を確認してください。

何が起きたのか: RSC・Server Functions のデシリアライズ

React Server Components は、サーバーとクライアントの間でコンポーネントのデータやアクションの引数をやり取りする際に「Flight」というプロトコルを使います。Server Functions(Next.js では Server Actions として知られる仕組み)を呼び出すと、クライアントから送られてきたペイロードをサーバー側でデシリアライズ(復元)してから処理します。

問題は、この復元処理が信頼できない入力を受け取る点にあります。攻撃者は正規のクライアントを介さず、Server Function のエンドポイントへ直接、細工したリクエストを送れます。復元処理に想定外の構造を渡すことで、CPU を延々と消費させたり、メモリを大量に確保させたりできてしまいます。

2025年12月の RCE(React2Shell)は「復元したデータを信頼してコードを実行してしまう」問題でした。今回の DoS 群は、コード実行までは至らないものの「復元処理そのものが過剰なリソースを食う」問題です。攻撃対象面(デシリアライズ処理)は同じで、そこから派生した別系統の脆弱性という位置づけです。

CVE-2026-23864 と CVE-2026-23869 の違い

同じ DoS でも、消費されるリソースと原因が異なります。

項目CVE-2026-23864CVE-2026-23869
公表日2026年1月26日2026年4月8日
CVSS7.5(High)7.5(High)
主な影響メモリ枯渇・サーバークラッシュ・過剰 CPU過剰 CPU 消費
原因の傾向復元時のリソース確保に関する不備巡回参照(cyclic)を含むデータ構造の扱いの不備
影響バージョン13.x / 14.x / 15.x / 16.x>=13.0.0 かつ 15.5.15 未満、>=16.0.0 かつ 16.2.3 未満
修正版(Next.js)15.5.10 / 16.1.5 など15.5.15 / 16.2.3

CVE-2026-23864 については、先行する CVE-2025-55184(2025年12月11日公表の DoS)の最初の修正が不完全だったことが指摘されています。つまり「一度パッチを当てたが、塞ぎきれていなかった」ケースです。

CVE-2026-23869 は、React Flight プロトコルのサーバー側の応答処理で、巡回参照を含むデータ構造の扱いに不備があり、復元時に過剰な CPU を消費する、と説明されています。

NOTE

原因メカニズムの細部(どのコードパスで、どのような構造が引き金になるか)は、防御観点では「最新パッチまで上げる」ことに集約されます。攻撃を再現する具体的な手順はここでは扱いません。

前身の RCE(2025年12月)との関係

時系列で並べると、同じデシリアライズ面から複数の CVE が派生してきた流れが見えます。

  • 2025年12月上旬: CVE-2025-55182(React2Shell, RCE, CVSS 10.0) が公表。認証不要で任意コード実行が可能な最悪級の脆弱性でした。実際の被害としてはクリプトマイナー感染の事例も報告されています。
  • 2025年12月11日: 追加で CVE-2025-55184(DoS, High)と CVE-2025-55183(ソースコード露出, Medium)が公表。最初のパッチに対する後続の指摘でした。
  • 2026年1月26日: CVE-2026-23864(DoS, CVSS 7.5)。CVE-2025-55184 の修正が不完全だった点を塞ぐもの。
  • 2026年4月8日: CVE-2026-23869(DoS, CVSS 7.5)。巡回参照に起因する CPU 消費。

ポイントは、「最初の RCE を塞いだから安心」ではないことです。デシリアライズという同じ入口に対して、時間をおいて別の欠陥が見つかり続けています。RCE を塞いだ古いパッチ版で止まっていると、後続の DoS が未対策のまま残ります。恒久的には、こまめに最新のパッチ版へ追随する運用が必要です。

自分のプロジェクトは影響するか確認する方法

1. まず前提を確認する

以下に当てはまるほど、影響を受ける可能性が高くなります。

  • Next.js を App Router で運用している
  • Server Functions / Server Actions を使っている(フォーム送信やミューテーションなど)
  • そのエンドポイントがインターネットに公開されている

完全な静的サイト(output: 'export' 等)で Server Functions を一切使っていない場合、攻撃対象面は小さくなります。ただし判断が難しいため、いずれにせよバージョンは上げておくのが安全です。

2. 使っている Next.js のバージョンを確認する

インストール済みの実バージョンを確認します。package.json の記述(キャレット付きなど)ではなく、実際に解決されたバージョンを見ることが重要です。

Shell
# 実際に入っている next のバージョンを確認
npm ls next
 
# 補助: 最新の公開バージョンを確認
npm view next version

npm ls next で表示された版が、前述の修正版に達しているかを照合してください。たとえば 16.0.x16.1.x は CVE-2026-23869 の修正版 16.2.3 に届いていないため、対象になります。

3. ロックファイルも確認する

モノレポや間接依存で、意図せず古い版が残ることがあります。ロックファイルの実体を確認します。

Shell
# lockファイル上の next のバージョンを確認(npm の例)
npm ls next --all
 
# 監査ツールで既知の脆弱性をまとめて確認
npm audit

対処: アップグレード手順と緩和策

アップグレード(恒久対策)

最優先は、修正版までの更新です。CVE-2026-23864 と CVE-2026-23869 の両方を塞ぐため、15.5.15 以降または 16.2.3 以降を目安にします。

Shell
# 16系を使っている場合(CVE-2026-23869 の修正版以降へ)
npm install next@16.2.3
 
# 15系を使っている場合
npm install next@15.5.15
 
# React も対応版へ(安全とされる版の例)
npm install react@19.2.4 react-dom@19.2.4

更新後は、ロックファイルと node_modules を作り直してから、ビルドが通るか、Server Actions を含む主要な導線が正常に動くかを確認します。

Shell
rm -rf node_modules package-lock.json
npm install
 
# ビルドと動作確認
npm run build

13.x / 14.x を使っている場合はパッチが提供されないため、Next.js のバージョン移行の考え方も参考にしつつ、サポート対象の 15.x / 16.x へ計画的に移行してください。

WARNING

本番環境で npm run build や再起動を行う前に、他のビルドが同時に走っていないか、メモリに余裕があるかを必ず確認してください。複数のビルドが同時に走るとメモリが枯渇し、ビルドが強制終了してデプロイが壊れることがあります。

WAF などの緩和(時間稼ぎ)

すぐにアップグレードできない場合、WAF(Web Application Firewall)で該当リクエストをブロックする緩和が考えられます。Vercel はホスティング対象のプロジェクトに対して自動の WAF ルールを展開したと告知しています。

ただし、いずれの告知でも「WAF に全面的に依存しないこと」が明記されています。WAF はあくまで時間稼ぎであり、恒久対策は修正版へのアップグレードです。あわせて、Server Function エンドポイントに対するレートリミットや、異常な CPU・メモリ使用の監視を用意しておくと、DoS の兆候を早期に検知できます。

依存関係まわりのリスク管理という観点では、npm のサプライチェーン攻撃事例や、同時期に公表されたNode.js の TLS ホスト名検証バイパスもあわせて把握しておくと、更新運用の優先度づけがしやすくなります。

まとめ

  • CVE-2026-23864(2026年1月26日, CVSS 7.5)と CVE-2026-23869(2026年4月8日, CVSS 7.5)は、App Router の Server Function エンドポイントを狙うデシリアライズ由来の DoSです。
  • 前者はメモリ枯渇・クラッシュ、後者は巡回参照による CPU 過剰消費が主な影響です。いずれも認証不要で、繰り返し攻撃により DoS を継続させられます。
  • 2025年12月の RCE(CVE-2025-55182)と同じデシリアライズ面から派生した後続 DoS であり、「RCE を塞いだ古い版で止まる」運用が最も危険です。
  • 対処は最新パッチへのアップグレード。目安は Next.js 15.5.15 以降または 16.2.3 以降、React は 19.0.4 / 19.1.5 / 19.2.4 以降です。13.x・14.x はパッチ対象外のため計画的な移行が必要です。
  • WAF やレートリミットは緩和にはなりますが、全面依存はできません。恒久対策はバージョン更新です。

バージョン番号・日付・CVSS は本記事執筆時点(2026年7月2日)で確認できた情報です。適用前に必ず一次情報で最新の修正版を確認してください。


参考リンク