React・Next.js 重大な脆弱性まとめ|React2Shell(CVE-2025-55182)から見る2025-2026年の脅威と対策

2025年12月3日、React開発チームは「React Server Components(RSC)」のプロトコル層に存在する、CVSSスコア10.0(最高値)の重大な脆弱性を公表しました。この脆弱性はCVE-2025-55182として登録され、Next.jsを含む主要フレームワークに波及したことから、コミュニティでは通称「React2Shell」と呼ばれています。Reddit上のr/reactjsコミュニティでも本件は大きな話題となり、開発者たちが自分たちのプロジェクトが影響を受けるかどうかを慌てて確認し合う様子が見られました。

本記事では、この一連の騒動を「React Next.js 重大な脆弱性 まとめ」として、2025年12月から2026年1月にかけて相次いで公表された複数のCVEを時系列で整理し、技術的な背景、実際に観測された悪用状況、そして開発現場で今すぐ実行すべき対策までを網羅的に解説します。特定の脆弱性を深掘りする記事は他にも存在しますが、本稿は「全体像を素早く把握したい」というニーズに応える総合まとめとして構成しています。

何が起きたのか:一連の脆弱性の全体像

2025年12月から2026年1月にかけて、React Server Components関連のセキュリティ問題は単発ではなく、少なくとも次の5件が連鎖的に公表されました。いずれも「Flight」と呼ばれるRSCのシリアライズ/デシリアライズ・プロトコルの実装に起因するもので、Server Functions(旧Server Actions)の呼び出しを処理する経路に問題が集中しています。

CVE-2025-55182(React2Shell):無認証の遠隔コード実行

最初に公表されたのがCVE-2025-55182です。react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopackといったパッケージにおいて、Server Functionsのペイロードをデシリアライズする処理に欠陥があり、細工されたHTTPリクエストを送るだけで認証なしにサーバー上で任意のコードが実行される恐れがありました。CVSSスコアは満点の10.0です。React 19.0、19.1.0〜19.1.1、19.2.0が影響を受け、19.0.1・19.1.2・19.2.1で修正されています。発見者はLachlan Davidson氏で、Meta Bug Bountyを通じて2025年11月29日に報告され、11月30日に確認、12月1日に修正、12月3日に一般公開という異例の速さで対応が進みました。

CVE-2025-66478:Next.js側への波及

React本体の脆弱性を受けて、Next.jsはApp Routerで同様の影響を受けることを公表しました。対象はNext.js 15.x、16.x、および14.3.0-canary.77以降のcanaryリリースで、13.x系・14.x安定版・Pages Router・Edge Runtimeは対象外とされています。修正版は15.0.5/15.1.9/15.2.6/15.3.6/15.4.8/15.5.7/16.0.7などで、Vercelは修正を自動化するツールnpx fix-react2shell-nextを12月6日に公開しました。

CVE-2025-55183・CVE-2025-55184:追加で見つかった2つの脆弱性

React2Shellのパッチを検証していた研究者(GMO Flatt SecurityのRyotaK氏、Andrew MacPherson氏)により、12月11日にさらに2件の脆弱性が報告されました。CVE-2025-55184はDoS(サービス拒否)で、細工したリクエストによりサーバープロセスが無限ループに陥り応答不能になるというもの(CVSS 7.5)。CVE-2025-55183はソースコード開示の脆弱性で、あるServer Functionへのリクエストが別のServer Functionのコンパイル済みソースコードを返してしまうというもの(CVSS 5.3)。バンドラーの設定次第では、コード中に直接埋め込まれたシークレットが漏えいする可能性も指摘されました。

CVE-2025-67779:DoS修正の再修正

CVE-2025-55184に対する当初の修正が不完全であったことが判明し、完全な修正としてCVE-2025-67779が発行されています。一度アップグレードした開発者も再度最新パッチ版への更新が必要になりました。

CVE-2026-23864:2026年1月に発覚した新たなDoS

年が明けた2026年1月26日には、メモリ枯渇を伴う新たなDoS脆弱性CVE-2026-23864(CVSS 7.5)が公表されました。App RouterのServer Function経路を通じて、認証なしにCPU使用率の急上昇やメモリ不足によるサーバークラッシュを引き起こせるというものです。Next.js 13〜14.x系はApp Routerが内部的にRSC境界をプロキシする構造のため影響を受けますが、v14はサポート終了(EOL)のためバックポートは行われず、15.0.8/15.1.12/15.2.9/15.3.9/15.4.11/15.5.10/16.0.11/16.1.5などへのアップグレードが推奨されました。

なぜここまで深刻だったのか:技術的背景

React Server Componentsは、サーバー側のReactコンポーネントをクライアントに送る際、専用のシリアライズ形式(通称Flightプロトコル)を使います。Server Functions(旧Server Actions)を呼び出す際には、クライアントから送られてきた引数をサーバー側でデシリアライズして関数に渡す必要があります。今回の一連の脆弱性は、この「信頼できないクライアント入力をサーバー側でデシリアライズする」という設計の根幹部分に問題があったため、RSCやServer Functionsを有効にしているアプリケーションはデフォルト設定のまま影響を受けるという特徴がありました。

特にCVE-2025-55182が深刻だった理由は次の3点に集約されます。

  • 攻撃に認証が不要で、公開されているエンドポイントに対してそのまま悪用できたこと
  • React 19系・Next.js 15/16系というモダンなApp Router構成の「標準設定」がそのまま影響範囲だったこと
  • CVSS 10.0という最高深刻度であり、理論上は任意のコード実行、すなわちサーバーの完全掌握につながり得たこと

実際に何が起きたか:悪用状況とコミュニティの反応

この脆弱性は公表からわずか1日後の12月4日には、実環境での悪用が報告される事態になりました。複数のセキュリティベンダーが、クラウド認証情報の窃取、XMRigを用いた暗号資産マイニングマルウェアの設置、リモートアクセスツールの展開といった悪用パターンを観測したと報告しています。Next.js公式ブログも「12月4日午後1時(太平洋時間)時点で未パッチのままオンラインだったアプリケーションは、重要な順にすべてのシークレットをローテーションすることを強く推奨する」という異例の注意喚起を追記しました。

この一件はr/reactjsをはじめとする開発者コミュニティでも大きな反響を呼びました。「デフォルト設定のApp Routerがいきなり最高深刻度の脆弱性を抱えていた」という事実は、RSCやServer Actionsのような比較的新しい機能を採用する際のリスク評価の難しさを浮き彫りにしたとして議論の的になりました。また、Vercel・Netlify・AWS・Google Cloud・Microsoft・Cisco・Palo Alto Networksといった主要クラウド/セキュリティベンダーが軒並み緊急のセキュリティ情報を公開したことも、影響範囲の広さを裏付けています。一方で、React・Next.jsチームが報告から公開修正まで4日というスピードで対応した点は、コミュニティから一定の評価を得ました。

自社プロジェクトが影響を受けるかの確認ポイント

  • React Server Components(RSC)またはServer Functions(Server Actions)を利用しているか
  • Next.jsのApp Routerを使用しているか(Pages Routerのみの場合は一連のRCE/DoSの直接対象外だが、更新は推奨)
  • 使用しているReact/Next.jsのバージョンが、各CVEで示された「影響を受けるバージョン」の範囲に含まれるか
  • react-router、waku、@parcel/rsc、@vitejs/plugin-rsc、rwsdkなど、RSCを利用する他フレームワーク経由で依存していないか

今すぐ実行すべき対策

1. バージョンを最新の修正版へ更新する

回避策(ワークアラウンド)は存在しないため、パッチ適用が唯一の恒久対策です。Next.jsチームは診断・更新を自動化するツールを提供しています。

# Next.jsのバージョン診断と自動更新
npx fix-react2shell-next

# 手動で更新する場合の例(利用中の系列に合わせて選択)
npm install next@14.2.35   # 14.x系
npm install next@15.5.9    # 15.5.x系
npm install next@16.1.5    # 16.x系

# React本体・RSCランタイムを直接利用している場合
npm install react@latest react-dom@latest react-server-dom-webpack@latest

複数のCVEが短期間で連鎖したため、「一度アップデートしたから安心」ではなく、公式アドバイザリのバージョン表と現在の依存バージョンを都度突き合わせることが重要です。

2. アップデート後にシークレットをローテーションする

未パッチの状態で公開されていた期間があった場合は、パッチ適用と再デプロイの後、APIキーやDB接続情報などのシークレットを全てローテーションします。ソースコードに直書きされた値はバンドル出力に埋め込まれる可能性があるため、環境変数経由での参照に統一することも合わせて見直すべきです。

# 悪い例: ソース内にシークレットを直書き
const apiKey = "sk-xxxxxxxxxxxxxxxx";

# 良い例: 実行時に環境変数から読み込む
const apiKey = process.env.API_SECRET_KEY;

3. 依存関係の棚卸しと監視体制の整備

package.jsonのlockfileを対象に、React・Next.js・react-server-dom-*系パッケージのバージョンを定期的に棚卸しする仕組みを用意します。CI上でnpm auditや依存関係スキャンツールを実行し、重大な脆弱性が公表された際に検知できるようにしておきます。

# CIパイプラインでの定期チェック例
npm audit --omit=dev
npx npm-check-updates "/^(next|react|react-dom|react-server-dom-.*)$/"

4. WAF・エッジでの一時的な緩和(恒久対策ではない点に注意)

即時のバージョン更新が難しい場合の一時的な緩和として、ホスティングプロバイダーやCDN側でのルール適用が案内されたこともありました。ただし公式アドバイザリは繰り返し「これらは一時的な緩和に過ぎず、パッチ適用が必須である」と強調しています。ホスティング側の対策に依存し続けることは推奨されません。

5. インシデント対応体制の見直し

今回のように「公表から1日で悪用が観測される」というスピード感を踏まえ、脆弱性公表時に誰が・どの手順で・どれくらいの時間で対応するかを事前に定めておくことが重要です。特にNext.jsアプリケーションを本番運用している場合は、セキュリティアドバイザリの購読、緊急デプロイの権限整理、シークレットローテーションの手順書を平時のうちに準備しておくべきです。

チェックリスト:今すぐ確認すべき項目

  • 使用中のReact/Next.jsのバージョンを把握し、各CVEの「影響を受けるバージョン」に該当しないか確認したか
  • App RouterおよびServer Functionsを利用している場合、最新の修正版へアップデートしたか
  • 過去に未パッチの状態で公開されていた期間がなかったか確認し、該当する場合はシークレットをローテーションしたか
  • ソースコードにシークレットを直書きせず、環境変数経由で参照する構成になっているか
  • 依存関係を継続的に監視する仕組み(CIでの監査、脆弱性通知の購読)を整備したか
  • 公式のセキュリティアドバイザリ(react.dev/blog、nextjs.org/blog)を定期的に確認する運用があるか

まとめ

2025年12月から2026年1月にかけて相次いで公表されたReact Server Components関連の脆弱性群は、CVSS10.0の無認証RCE(CVE-2025-55182/CVE-2025-66478)を筆頭に、ソースコード開示(CVE-2025-55183)、DoS(CVE-2025-55184/CVE-2025-67779/CVE-2026-23864)と、性質の異なる複数の問題が短期間に連続したという点で特異な事例でした。いずれもRSCの「クライアント入力をサーバー側でデシリアライズする」という共通の仕組みに起因しており、App Routerを標準構成のまま利用しているだけで影響を受け得たことが、コミュニティに大きな衝撃を与えた理由です。

個々のCVE番号を覚えることよりも重要なのは、「新しいアーキテクチャの標準設定がそのまま重大な脆弱性の対象になり得る」という教訓を踏まえ、バージョン管理・依存関係監視・シークレット管理・インシデント対応体制を平時から整えておくことです。本記事のチェックリストを参考に、自社プロジェクトの状況を今一度確認することをおすすめします。

コメント

タイトルとURLをコピーしました