
react CVE-2025-55182
重大度: 緊急 — CVSS 10.0
CWE: CWE-502 (信頼されないデータのデシリアライゼーション)
ベンダー: Meta (Facebook)
開示日: 2025年12月3日
CVE-2025-55182 は、React Server Components (RSC) における最大深刻度の未認証リモートコード実行 (RCE) 脆弱性であり、React2Shell と呼ばれています。この欠陥は、React が Flight プロトコル を介して React Server Function エンドポイントに送信されたペイロードをデコードする方法に存在します。攻撃者は、巧妙に細工された単一の HTTP POST リクエストを脆弱なサーバーに送信するだけで、認証情報やユーザー操作を必要とせずに任意のコードを実行できます。
明示的な Server Function エンドポイントを公開していないアプリケーションでも、React Server Components をサポートしている場合は脆弱です。
| パッケージ | 影響を受けるバージョン | パッチ適用済みバージョン |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
影響を受けるフレームワーク (脆弱な React パッケージを使用している場合): Next.js 15.x / 16.x (App Router)、React Router、Waku、RedwoodSDK、Parcel RSC、Vite RSC プラグイン。
ベクター文字列: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
React Server Components は、Flight プロトコル と呼ばれるバイナリワイヤフォーマットを使用して、コンポーネントツリーをサーバーからクライアントへストリーミングします。同じプロトコルが Server Functions (旧 Server Actions) も処理します。これは、ブラウザからシリアライズされた引数を受け取る呼び出し可能なエンドポイントです。
脆弱性は デシリアライザー にあります。React が Flight ペイロードを処理する際、任意のサーバーサイドオブジェクトをインスタンス化するよう誘導される可能性があり、完全な RCE につながります。RSC が有効な場合、Flight エンドポイントはデフォルトで公開され、プロトコルレベルに認証ゲートが存在しないため、悪用にはサーバーへのネットワークアクセスのみが必要です。
付属のテンプレート CVE-2025-55182.yaml は、3 つの相補的な検出方法を使用します。
最小限の POST を Content-Type: text/x-component でルートパスに送信します。脆弱な (または到達可能な) RSC サーバーは、同じコンテンツタイプと、行が英数字の行 ID とコロン (例: 0:、1:) または React 参照シジル ($L、$S、$I、$@) で始まる Flight ストリームボディで応答します。
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
一致条件: HTTP 200 + text/x-component ヘッダー + ボディ内の Flight ストリーム正規表現。
Next.js は、RSC: 1 ヘッダーと ?_rsc= クエリパラメータを介して RSC リクエストを通知します。このリクエストはブラウザのプリフェッチを模倣して、App Router の Flight エンドポイントが到達可能であることを確認します。
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
一致条件: HTTP 200 + text/x-component ヘッダー。
最小限の不正な Flight ペイロードを Next-Action ヘッダー (Server Functions を呼び出すために使用されるメカニズム) とともに送信します。脆弱なサーバーはペイロードのデシリアライズを試みます。RSC 固有のヘッダーを含むエラーレスポンスであっても、エンドポイントの存在が確認されます。
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
一致条件: HTTP 200/400/500 + text/x-component または x-action-revalidated ヘッダー。
ローカルの *.json ファイル (例: package-lock.json、yarn.lock) をスキャンし、脆弱なパッケージ名と 19.0.0、19.1.0、19.1.1、または 19.2.0 に一致するバージョン正規表現を組み合わせて検出します。ネットワークトラフィックを送信せずにリポジトリや CI パイプラインを監査するのに役立ちます。
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
パッチ適用済みバージョンに直ちにアップグレード してください:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
ブランチごとの最小安全バージョン:
| ブランチ | 最小安全バージョン |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
一時的な緩和策 (直ちにアップグレードできない場合):
text/x-component コンテンツタイプを対象とした WAF ルールを展開する (この CVE に関する Google Cloud Armor ルールが公開されています)。package-lock.json、node_modules、または SBOM の検査が必要です。このテンプレートは、許可されたセキュリティテストおよび脆弱性評価のみを目的としています。所有していない、または明示的な書面によるテスト許可がないシステムに対して実行することは、違法となる可能性があります。著者は誤用に対するいかなる責任も負いません。
| メトリック | 値 |
|---|
| 攻撃ベクトル | ネットワーク |
| 攻撃の複雑さ | 低 |
| 必要な権限 | なし |
| ユーザー操作 | なし |
| スコープ | 変更あり |
| 機密性 | 高 |
| 完全性 | 高 |
| 可用性 | 高 |
| 総合スコア | 10.0 (緊急) |