
CVE-2025-55182(「React2Shell」)の概念実証。React Server Componentsの安全でない逆シリアル化を介したリモートコード実行(RCE)を実証する完全にDocker化された環境。Vanilla React(Express)とNext.jsの両方の脆弱なターゲットと、カスタムPythonエクスプロイトスクリプトが含まれます。
⚠️ 免責事項: 教育目的のみ このリポジトリには、重大な脆弱性(CVSS 10.0)に対する機能的なエクスプロイトコードが含まれています。これは、厳密に学術研究、セキュリティ分析、および教育目的を意図しています。自分が所有していない、または明示的なテスト許可を得ていないシステムに対してこのコードを使用しないでください。著者は、いかなる誤用に対しても責任を負いません。
このプロジェクトは、React Server Components (RSC) アーキテクチャに存在する重大なリモートコード実行(RCE)脆弱性である CVE-2025-55182 を文書化し、実証します。しばしば「React2Shell」と呼ばれるこの欠陥により、認証されていないリモート攻撃者が、react-server で使用される「Flight」シリアル化プロトコルを操作することで、サーバー上で任意のコードを実行できるようになります。
この実験室は、制御された隔離されたDocker環境を提供し、2つの異なるシナリオで脆弱性を分析します。
react-server-dom-webpack と Express を使用した生の実装。環境は Docker Compose で構成され、プライベート内部ネットワーク(research-net)で接続された3つの隔離されたコンテナで構成されています。
| サービス | コンテキスト | 説明 | 脆弱なコンポーネント |
|---|
vanilla-target | vanilla-rsc/ | RSCプロトコルを手動で実装した最小限のExpressサーバー。 | [email protected] |
nextjs-target | nextjs-app/ | App Routerを使用した標準のNext.jsアプリケーション。 | [email protected] (impl. react-server) |
attacker | exploit/ | エクスプロイトスクリプトを含むPython環境。 | 該当なし |
この脆弱性は、Flightプロトコルパーサー内の**安全でないデシリアライゼーション(CWE-502)**に起因します。細工されたマルチパートペイロード(「偽の」チャンク構造を含む)を注入することにより、攻撃者は以下を実行できます。
.then プロパティを上書きする。$B blobを参照)を強制的にトラバースさせる。Function() コンストラクタに到達して任意のJavaScript(例:child_process.execSync)をコンパイルして実行する。リポジトリをクローンします。
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
実験室をビルドして起動します。
docker-compose up -d --build
コンテナが完全に初期化されるまで待ちます。Next.jsコンテナは最初のビルドを完了するまでに数分かかる場合があります。
エクスプロイトロジックは exploit/exploit.py にカプセル化されています。ホストマシン(Pythonがインストールされている場合)または attacker コンテナから直接攻撃を実行できます。
Attackerシェルにアクセスします。
docker-compose exec attacker bash
依存関係をインストールします。
pip install -r requirements.txt
ターゲットA (Vanilla React) を攻撃します。
python exploit.py http://vanilla-target:4000/rsc vanilla
ターゲットB (Next.js) を攻撃します。
python exploit.py http://nextjs-target:3000/ nextjs
エクスプロイトは、被害サーバーの /tmp ディレクトリに pwned.txt という名前のファイルを作成しようとします。成功を確認するには:
# Vanillaサーバーを確認
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Next.jsサーバーを確認
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
成功した場合、ファイルのリストが表示されます。エクスプロイトが失敗した場合、ファイルは存在しません。
本番環境でこの脆弱性を緩和するには:
react-server-dom-webpack(および関連パッケージ)をバージョン 19.0.1、19.1.2、または 19.2.1+ にアップグレードします。"$1:__proto__" のようなシグネチャや、マルチパートボディでの "$@" の異常な使用を含むリクエストをブロックするルールを実装します。大学プロジェクト - セキュリティ監査と脆弱性研究