React2Shell(CVE-2025-55182)とは
React2Shell は、2025年12月3日に Meta と Vercel が公表した React Server Components(RSC)の致命的な脆弱性です。CVE 番号は CVE-2025-55182、深刻度は CVSS 10.0(最大値)。認証前(事前認証)のリモートコード実行(RCE)が可能で、攻撃者は細工した HTTP リクエスト 1 通でサーバー上に任意のコードを実行できます。
React / Next.js は世界中の Web アプリで使われているため影響範囲が極めて広く、業界では Log4Shell(CVE-2021-44228)に並ぶ規模のフレームワーク層脆弱性として扱われました。
なぜこれほど危険なのか
- 事前認証: ログイン不要。公開エンドポイントに到達できれば誰でも攻撃を試みられる。
- RCE: 情報漏えいに留まらず、サーバーそのものを乗っ取れる(コインマイナー設置や横展開の起点になる)。
- CVSS 10.0: 攻撃の容易さ・影響の大きさともに最大評価。
- 普及度: React 19 / Next.js を使う多数のアプリが対象になりうる。
公表直後(2025年12月5日頃)から悪用の試みが観測され、当初はレッドチームによる検証が中心でしたが、実際の攻撃者がコインマイナーを設置する事例も報告されました。
根本原因: 安全でないデシリアライズ
React Server Components は、クライアントからのリクエストをサーバー側の関数呼び出し(Server Functions / Server Actions)に変換するため、リクエストのペイロードをデシリアライズします。CVE-2025-55182 は、このペイロードのデコード処理に十分な検証がなかったことに起因します。
攻撃者が Server Function のエンドポイントに細工したペイロードを送ると、本来データとして扱うべき入力がサーバー側の処理へ流れ込み、安全でないデシリアライズ(Insecure Deserialization)を経て任意コード実行に至ります。これは OWASP でいう A08:2021 - Software and Data Integrity Failures に分類される、古典的かつ強力な脆弱性パターンです。
「ユーザーから来たデータをそのままオブジェクトや処理に復元する」とき、信頼境界を越えた入力が実行コンテキストに混入しうる——これがデシリアライズ系脆弱性の本質です。
攻撃の流れ(概念)
悪用を助長しないため、具体的なエクスプロイトコードは載せず、流れの概念だけを示します。
- 攻撃者が RSC の Server Function を受け付けるエンドポイントを特定する(多くは通常の POST エンドポイント)。
- デシリアライズ処理を悪用する細工済みペイロードを HTTP リクエストとして送信する。
- サーバーが検証不十分なままペイロードをデコード・処理し、任意コードが実行される。
- 以降、Web シェル設置・認証情報窃取・横展開などに繋がる。
影響を受けるバージョンと修正版
以下は公表時点で示された主なバージョンです。最終的な対象・修正版は必ず公式の GitHub Security Advisory / NVD で確認してください(アドバイザリは更新されることがあります)。Next.js 側にも関連して CVE-2025-66478 が併せて報告されています。
| 対象 | 影響を受けるバージョン | 修正版 |
|---|---|---|
| React Server Components | 19.0.0 / 19.1.0 / 19.1.1 / 19.2.0 | 19.0.3 / 19.1.4 / 19.2.3 |
| Next.js | 上記 RSC を含む各系列 | 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 / 15.4.8 / 15.5.7 / 16.0.7 |
| 対象 npm パッケージ | react-server-dom-webpack / react-server-dom-turbopack / react-server-dom-parcel | |
自分のアプリは影響を受けるか
- Server Actions / Server Functions を使っている(フォーム送信やサーバー関数呼び出し)→ 影響大。最優先で対応する。
- RSC を使う SSR / App Router 構成 → 対象バージョンなら対応が必要。
- 静的書き出し中心・クライアントコンポーネントのみで Server Function を持たない → 攻撃面は限定的だが、バージョンは上げておく。
まず使用バージョンを確認します。
# Next.js / React のバージョンを確認
npm ls next react react-dom
# package.json と lockfile(package-lock.json 等)も確認する対策
- 修正版へ即アップグレード(最優先)。React / Next.js を公式アドバイザリ記載のパッチ版以上に上げる。
- 一時緩和: すぐに上げられない場合、WAF で Server Function エンドポイントへの異常なペイロードを遮断し、不要なら該当機能を無効化する。
- 監視: 公表後に観測された不審なプロセス(コインマイナー等)や外向き通信を検知する。侵害の痕跡(IoC)はベンダーのアドバイザリを参照。
- 多層防御: egress 制限・最小権限・ネットワーク隔離で、万一 RCE が成立しても被害を局所化する。
教訓: デシリアライズと信頼境界
React2Shell は新概念の脆弱性ではなく、「外部入力を検証せずに復元・実行してはならない」という古典的原則の再来です。フレームワークが裏側で行うデシリアライズも、ユーザー入力が絡む以上は信頼境界の対象になります。
- ユーザー由来データはあくまでデータとして扱い、コード/オブジェクト復元の経路に直結させない。
- 依存フレームワークのセキュリティ通知を購読し、CVSS 9.0 以上は即時対応するフローを用意しておく。
- SBOM や依存可視化で「どのバージョンを使っているか」を常に即答できる状態にしておく。
まとめ
React2Shell(CVE-2025-55182)は CVSS 10.0・事前認証 RCE という最悪クラスの脆弱性で、原因は RSC のペイロードデシリアライズの検証不足でした。対応はシンプルで、(1) バージョン確認 → (2) 修正版へアップグレード → (3) 監視と一時緩和の順に進めます。フレームワーク任せの処理であっても、ユーザー入力が通る以上は信頼境界が存在することを思い出させる事例です。
関連リスクの全体像は OWASP Top 10 入門、ヘッダによる多層防御は HTTP セキュリティヘッダ詳解 も合わせてご覧ください。