
意図的に脆弱な Next.js RSC Docker ラボ。CVE-2025-55182 (React2Shell) のローカルテスト用
認可されたセキュリティ研究用のローカル Docker ラボ: CVE-2025-55182 (React2Shell) の影響を受けるバージョン範囲の React Server Components / Next.js App Router スタック。
自分のマシンでのみ使用してください。このコンテナをインターネットに公開しないでください。
| コンポーネント | バージョン | 備考 |
|---|
| Next.js | 15.1.0 | パッチ適用前; npm が既知の問題を警告します |
| React / react-dom | 19.2.0 | この CVE の影響を受ける 19.x 系 |
| RSC パイプライン | Next にバンドル | 逆シリアル化は Next がコンパイルした react-server-dom-* 経由で実行されます |
このアプリは、Next-Action ヘッダー付きの POST / が実際のターゲットのように動作するように、1 つの Server Action を持つ最小限の App Router ページです。
git clone https://github.com/l0lsec/cve-2025-55182-lab.git
cd cve-2025-55182-lab
# Build and run in the background
docker compose up --build -d
http://localhost:3000 を開くと、“RSC lab (intentionally vulnerable)” と小さなフォームが表示されるはずです。
curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/
# expect: 200
docker compose logs -f
docker compose down
http://localhost:3000 に設定します (または Burp 経由でトンネリングします)。Content-Type: multipart/form-data と Flight プロトコルのエクスプロイト本文 (公開されている write-up / 自分のテンプレートにあるようなマルチパートフィールド 0、1、2) を指定して POST / を送信します。Next-Action ヘッダー
Next-Action 値をコピーしてみる、またはヘッダー形式の例:
Next-Action: <action-id-from-intercepted-request>
汎用のプレースホルダーが機能しない場合は、正規の送信後に Proxy 履歴から取得したライブな id を常に優先してください。
貼り付け可能な POST / マルチパートテンプレートは burp-payloads/ にあります (例: id、whoami、時間ベースの sleep、OOB プレースホルダー)。ファイル一覧は burp-payloads/README.md を参照してください。送信前に OOB テンプレート内の YOUR-COLLABORATOR-HOST を置き換えてください。
.
├── Dockerfile # Multi-stage build, Next standalone, port 3000
├── docker-compose.yml # Maps host 3000 → container 3000
├── burp-payloads/ # Raw *.http for Burp Repeater + index README
├── app/
│ ├── layout.tsx
│ └── page.tsx # Server Action + lab UI
├── public/
├── package.json
├── package-lock.json
└── next.config.ts # output: "standalone"
npm install
npm run dev
# http://localhost:3000
CVE の再現には、スタックが固定された脆弱な依存関係と一致するように、Docker イメージを推奨します。
教育 / ラボ用途のみ。お住まいの地域の法律とポリシーを遵守する責任はあなたにあります。保証はありません。