
Laboratoire Docker Next.js RSC volontairement vulnérable pour les tests locaux de CVE-2025-55182 (React2Shell)
Labo Docker local pour la recherche en sécurité autorisée : React Server Components / Next.js App Router avec une pile dans la plage affectée par la CVE-2025-55182 (React2Shell).
À utiliser uniquement sur votre propre machine. N'exposez pas ce conteneur sur Internet.
| Composant | Version | Note |
|---|
| Next.js | 15.1.0 | Pré-correctif ; npm avertit de problèmes connus |
| React / react-dom | 19.2.0 | Dans la ligne 19.x affectée par cette CVE |
| Pipeline RSC | Intégré dans Next | La désérialisation est exercée via le react-server-dom-* compilé de Next |
L'application est une page App Router minimale avec une Server Action, de sorte que POST / avec un en-tête Next-Action se comporte comme une cible réelle.
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
Ouvrez http://localhost:3000 — vous devriez voir « RSC lab (intentionally vulnerable) » et un petit formulaire.
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 (ou tunnelisez via Burp).POST / avec Content-Type: multipart/form-data et votre corps d'exploit du protocole Flight (champs multipart 0, 1, 2 comme dans les write-ups publics / vos modèles).Next-Action
Next-Action depuis cette requête, ouExemple de forme d'en-tête :
Next-Action: <action-id-from-intercepted-request>
Si un espace réservé générique ne fonctionne pas, préférez toujours l'identifiant live de l'historique du Proxy après une soumission légitime.
Des modèles multipart POST / prêts à coller se trouvent dans burp-payloads/ (par exemple id, whoami, sleep basé sur le temps, espaces réservés OOB). Consultez burp-payloads/README.md pour un index des fichiers. Remplacez YOUR-COLLABORATOR-HOST dans les modèles OOB avant l'envoi.
.
├── 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
Pour la reproduction de la CVE, préférez l'image Docker afin que la pile corresponde aux dépendances vulnérables épinglées.
Usage éducatif / laboratoire uniquement. Vous êtes responsable du respect des lois et des politiques de votre lieu d'exploitation. Aucune garantie.