FlawOpen

flawopen.com/Teardowns/cve-2025-55182-react-server-components-rce

● CVE-2025-55182 · CVSS 10.0[1] · 緊急
セキュリティ研究 · FlawOpen

CVE-2025-55182:React2Shell RSCのコード実行脆弱性

CVE-2025-55182はReact Server Components(RSC)のpayloadデコードにある未認証リモートコード実行の脆弱性です。Reactは欠陥を確認し、Google Threat Intelligenceはダウンローダー、バックドア、マイナーを展開する攻撃を記録しました。[1], [4], [5]

💡 わかりやすい解説 (ELI5)

許可済みサービスの一覧を確認する受付担当者を想像してください。誤った検索では、一覧のテンプレートから継承した名前を、管理者が登録した項目として扱ってしまいます。React の修正は、要求されたモジュールの export がそのモジュール自身のプロパティかを確認します。公開アドバイザリは完全な悪用手順を明らかにしていません。影響を受けるパッケージを更新してください。[1]

主要な概念と専門用語

React Server Components (RSC)
React Server Components:サーバーレンダリングとFlightデータ交換のためのReactプロトコルとパッケージ。[1]

フレームワーク対応

根本原因の分析 (Root Cause)

ReactはServer Function endpoint宛てpayloadのデコード不備を確認し、RSC対応だけでも影響し得ると説明しました。初回告知は詳細を伏せています。公開upstream patchはrequireModule()にown-property確認を加え、multipartエラー処理も強化します。この抜粋は具体的修正であり、脆弱性全体や攻撃連鎖の再現ではありません。[1], [2]

React2Shell の影響バージョンとデプロイ範囲

コンポーネントまたはデプロイ範囲の評価修正対応
react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack の 19.0、19.1.0、19.1.1、19.2.0。サーバー側 RSC 対応があると、Server Function エンドポイントを明示的に定義していなくてもアプリが影響を受ける可能性があります。サーバー境界が到達可能である必要があります。該当するパッケージ系列を 19.0.1、19.1.2、19.2.1 以降に更新し、サーバー成果物を再ビルドして再デプロイします。
影響を受ける 15.x/16.x、または 14.3.0-canary.77 以降の canary 系列の Next.js App Router。影響を受けるフレームワーク統合には脆弱な RSC パッケージが含まれます。アプリが独自の Server Function エンドポイントを定義していないことだけで安全と判断しないでください。対応する系列の修正版を使用します:15.0.5、15.1.9、15.2.6、15.3.6、15.4.8、15.5.7、または 16.0.7 以降。これらは引用した勧告に記載された最低バージョンです。展開前にベンダーの現行系列を確認してください。
サーバー側 RSC 対応のないクライアント専用 React アプリ。サーバー側のデコーダー境界がないため、文書化された CVE の対象外です。この構成には React2Shell のサーバーパッチは不要です。RSC やサーバーコンポーネントを導入したら再評価してください。
修正済みと報告されたデプロイ。マニフェストのバージョンだけでは、すべての稼働リージョン、プレビュー、worker、コンテナが修正済み成果物を使っていると確認できません。本番、プレビュー、worker 環境のイメージ digest と解決済みパッケージバージョンを確認し、過去の露出期間も調査してください。
2026-01-26 の React 更新に記載された Next.js のブランチ別推奨版React の後日更新には、より新しいセキュリティリリースが記載されています。これらは CVE-2025-66478 を最初に修正した最小バージョンではありません。関連する RSC アドバイザリやサポート対象ブランチにより更新先は変わる場合があります。関連する RSC アドバイザリ CVE-2025-55183、CVE-2025-55184、CVE-2025-67779、CVE-2026-23864 について、React は修正版として 19.0.4、19.1.5、19.2.4 を示しました。2026-01-26 付の Next.js 推奨版は、安定版 13.3.x–14.x が 14.2.35、15.0.x が 15.0.8、15.1.x が 15.1.12、15.2.x が 15.2.9、15.3.x が 15.3.9、15.4.x が 15.4.11、15.5.x が 15.5.10、16.0.x が 16.0.11、16.1.x が 16.1.5 です。これは関連問題に対する後日の案内であり、CVE-2025-66478 を修正した Next.js の最小バージョンではありません。デプロイ前に最新のベンダーアドバイザリとサポート対象ブランチを確認してください。
CVE-2026-23869 — RSC のサービス拒否(2026-04-08)。React によると、Server Function エンドポイントへの細工された HTTP リクエストは、捕捉可能なエラーが発生するまで最大約 1 分間 CPU を過剰に消費する可能性があります。影響を受ける react-server-dom-* パッケージ系列は 19.0.4、19.1.5、19.2.4 までです。React が示す各系列の修正版は 19.0.5、19.1.6、19.2.5 です。
CVE-2026-23870 — RSC のサービス拒否(2026-05-06)。React によると、細工された HTTP リクエストはメモリ不足例外や CPU の過剰消費を引き起こす可能性があります。影響を受ける react-server-dom-* パッケージ系列は 19.0.5、19.1.6、19.2.5 までです。React が示す各系列の修正版は 19.0.6、19.1.7、19.2.6 です。
CVE-2026-44907 — Server Functions のサービス拒否(2026-07-21)。React によると、細工された HTTP リクエストはメモリ不足例外や CPU の過剰消費を引き起こす可能性があります。影響を受ける react-server-dom-* パッケージ系列は 19.0.7、19.1.8、19.2.7 までです。React が示す各系列の修正版は 19.0.8、19.1.9、19.2.8 です。

ステップ・バイ・ステップの攻撃フロー

ステップ 1

公開RSC境界が未認証リクエストを受信

Reactは、独自endpointがなくてもRSC対応だけで影響し得ると説明しています。サーバーを持たないクライアント専用アプリは対象外です。[1], [4]

ステップ 2

細工されたリクエストが脆弱なデコーダーに到達

ベンダーはServer Function endpoint宛てリクエストのデコード不備と説明しています。完全な手順は非公開のため、未公開の仕組みを推測しないでください。[1], [2]

ステップ 3

Webプロセス権限でコードが実行

注意喚起では対象サーバープロセスの権限で実行されるとされています。影響は実行アカウントとアクセス可能なsecretやサービスに依存します。[1], [4]

ステップ 4

Google GTIGはトンネラー、ダウンローダー、バックドア、マイナーを観測

GTIGはトンネラー、ダウンローダー、バックドア、マイナー展開を観測しました。実際の悪用を示しますが、全脆弱ホストの侵害を意味しません。[5], [6]

ソースコード比較:脆弱 vs 堅牢化

このupstream patchの該当箇所はモジュール自身のexportだけを返します。デコーダーの欠陥全体を再現するものでも、単独で使える修正でもありません。React Server Componentsまたは対象frameworkを更新してください。[2], [1]

ソース抜粋: React ParcelクライアントのrequireModule()メソッド

脆弱な実装
export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = parcelRequire(metadata[ID /* module id */]);
  return moduleExports[metadata[NAME]];
}
堅牢化されたセキュアパッチ
export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = parcelRequire(metadata[ID /* module id */]);
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

エンジニアリング&システム堅牢化チェックリスト

参考資料