技術 約5分で読めます

Next.js / Reactの脆弱性「React2Shell」対応メモ

2025年12月、React Server Components(RSC)およびNext.jsにCVSS 10.0(最大深刻度) の脆弱性が発覚した。通称「React2Shell」。12月4日から実際に攻撃が確認されており、IPAも緊急の注意喚起を出している。

⚠️ 緊急性について 米国CISAは12月5日にKEVカタログへ追加し、修正期限を12月12日に設定。追加から1週間という異例の短期限は深刻さを示している。12月9日には「侵害兆候のチェック」も推奨された。

12月11日更新: 追加でDoS脆弱性(CVE-2025-55184 / CVE-2025-67779)とソースコード露出(CVE-2025-55183)が公開された。初回修正が不完全だったため、19.0.1 / 19.1.2 / 19.2.1 にアップデート済みでも再度アップデートが必要

何が起きるのか

攻撃者が細工したHTTPリクエストを送ると、サーバー上で任意のコードが実行される(Remote Code Execution = RCE)。

攻撃者 → 細工したPOSTリクエスト → Next.jsサーバー

                                RSCがデータをデシリアライズ

                                悪意あるコードが実行される

                                サーバー乗っ取り完了

攻撃者にできること

  • サーバー上でシェルコマンドを実行
  • 環境変数(APIキー、DBパスワード等)の窃取
  • ファイルの読み書き
  • バックドアの設置
  • 他システムへの横展開

なぜ危険か

  • 認証不要: ログイン機能の有無に関係なく攻撃できる
  • デフォルト設定で脆弱: 特別な設定ミスがなくても攻撃される
  • 攻撃が進行中: 12月4日から中国関連の脅威グループによる悪用が確認されている

影響を受ける条件

条件影響
Next.js 15.x / 16.x + App Router⚠️ 脆弱
Next.js 14.3.0-canary.77 以降のcanary⚠️ 脆弱
react-server-dom-* 19.x⚠️ 脆弱
Next.js 14.x 安定版✅ 安全
Next.js 13.x 以下✅ 安全
Pages Router のみ使用✅ 安全
Edge Runtime✅ 安全

チェック手順

方法1: package.jsonを確認

# Next.jsのバージョン確認
cat package.json | grep next

# react-server-dom-*のバージョン確認
cat package.json | grep react-server-dom

方法2: スキャナーツールで自動チェック

# dry-runで影響を受けるか確認(ファイル変更なし)
npx fix-react2shell-next --dry-run

対策手順

1. パッチを適用

Next.js

現在のバージョンアップデート先
15.0.0 – 15.0.415.0.5
15.1.0 – 15.1.815.1.9
15.2.0 – 15.2.515.2.6
15.3.0 – 15.3.515.3.6
15.4.0 – 15.4.715.4.8
15.5.0 – 15.5.615.5.7
16.0.0 – 16.0.616.0.7
15.x canary15.6.0-canary.58
16.x canary16.1.0-canary.12
14.3.0-canary.77以降14.3.0-canary.76にダウングレード or 15.0.5以上

react-server-dom-*

現在のバージョンアップデート先
19.0.0 – 19.0.219.0.3
19.1.0 – 19.1.319.1.4
19.2.0 – 19.2.219.2.3

⚠️ 注意: 19.0.1 / 19.1.2 / 19.2.1 は初回のRCE修正版だが、12月11日に公開されたDoS脆弱性(CVE-2025-55184)の修正が不完全だった。19.0.2 / 19.1.3 / 19.2.2 も同様に脆弱。必ず最新版にアップデートすること。

2. 自動修正ツールを使う

# インタラクティブモード(確認しながら修正)
npx fix-react2shell-next

# 自動修正モード(CI/CD向け)
npx fix-react2shell-next --fix

このツールはモノレポにも対応しており、プロジェクト内の全package.jsonを再帰的にスキャンして修正する。

3. デプロイ

パッチ適用後、速やかにデプロイする。

4. シークレットのローテーション

2025年12月4日 13:00 PT(日本時間 12月5日 6:00)以降にオンラインだったアプリケーションは、すでに攻撃を受けている可能性がある。

以下のシークレットをローテーションすることを強く推奨:

  • データベース接続情報
  • APIキー
  • JWTシークレット
  • 外部サービスの認証情報
  • その他環境変数で管理している秘密情報

12月11日追加: DoS・ソースコード露出の脆弱性

React2Shellの修正検証中に、追加で2種類の脆弱性が発見され、12月11日に公開された。

DoS(サービス拒否)- High

項目内容
CVECVE-2025-55184, CVE-2025-67779
CVSS7.5(High)
内容悪意あるHTTPリクエストでデシリアライズ時に無限ループ発生→サーバーがハング

Server Functionエンドポイントを実装していなくても、RSCをサポートしている場合は脆弱。

重要: CVE-2025-55184の初回修正が不完全だったため、19.0.2 / 19.1.3 / 19.2.2 はまだ脆弱。CVE-2025-67779は内部で追加発見されたDoS脆弱性。

ソースコード露出 - Medium

項目内容
CVECVE-2025-55183
CVSS5.3(Medium)
内容Server Functionのソースコードが漏洩する可能性

Server Functionが引数を文字列化して使用している場合、そのソースコードが攻撃者に返される可能性がある。

// 脆弱な例: ソースに秘密がハードコードされている
'use server';
export async function serverFunction(name) {
  const conn = db.createConnection('SECRET KEY'); // 漏洩する
  return { message: `Hello, ${name}!` };
}

ただし process.env.SECRET のようなランタイム環境変数は保護される。漏洩するのはソースコードに直接埋め込まれた秘密のみ。

修正バージョン

パッケージ脆弱安全
react-server-dom-webpack19.0.0 – 19.0.2, 19.1.0 – 19.1.3, 19.2.0 – 19.2.219.0.3, 19.1.4, 19.2.3
react-server-dom-parcel同上同上
react-server-dom-turbopack同上同上

CVE番号の整理

今回の一連の脆弱性に関するCVE番号をまとめる。

CVE番号対象深刻度説明
CVE-2025-55182ReactCritical (10.0)RSCの安全でないデシリアライゼーション(RCE)
CVE-2025-66478Next.jsCritical (10.0)上記のNext.js固有の問題
CVE-2025-55184ReactHigh (7.5)DoS(初回修正が不完全)
CVE-2025-67779ReactHigh (7.5)DoS(追加発見)
CVE-2025-55183ReactMedium (5.3)ソースコード露出

仕事で書く報告書などでは、対応しているCVE番号をすべて記載しておくと良い。

こちらはこれから対応します……。
対応しました

CISA KEVカタログ追加について

米国CISAは2025年12月5日、CVE-2025-55182をKnown Exploited Vulnerabilities(KEV)カタログに追加した。

  • 追加理由: 実際の攻撃が確認されたため
  • 対象: Meta React Server Components
  • 修正期限: 2025年12月12日(BOD 22-01に基づく連邦機関向け)
  • 12月9日更新: インターネットに公開されているReactインスタンスについて、緩和策適用後も侵害の兆候をチェックするよう推奨

CISAは「BOD 22-01は連邦機関向けだが、すべての組織がKEVカタログの脆弱性を優先的に修正することを強く推奨する」としている。

参考リンク