Preuve de concept pour CVE-2025-55182 (« React2Shell »). Un environnement entièrement dockerisé démontrant une exécution de code à distance (RCE) via une désérialisation non sécurisée dans les composants serveur React. Comprend des cibles vulnérables pour Vanilla React (Express) et Next.js, ainsi qu'un script d'exploitation Python personnalisé.
⚠️ AVERTISSEMENT : USAGE ÉDUCATIF UNIQUEMENT Ce dépôt contient un code d'exploitation fonctionnel pour une vulnérabilité critique (CVSS 10.0). Il est destiné strictement à la recherche académique, à l'analyse de sécurité et à des fins éducatives. N'utilisez pas ce code contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester. L'auteur n'est pas responsable de toute mauvaise utilisation.
Ce projet documente et démontre CVE-2025-55182, une vulnérabilité critique d'exécution de code à distance (RCE) résidant dans l'architecture React Server Components (RSC). Souvent désignée sous le nom de « React2Shell », cette faille permet à des attaquants distants non authentifiés d'exécuter du code arbitraire sur le serveur en manipulant le protocole de sérialisation « Flight » utilisé par react-server.
Ce laboratoire fournit un environnement Docker contrôlé et isolé pour analyser la vulnérabilité dans deux scénarios distincts :
react-server-dom-webpack et Express.L'environnement est orchestré via Docker Compose et se compose de trois conteneurs isolés connectés par un réseau interne privé (research-net).
| Service | Contexte | Description | Composant vulnérable |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Serveur Express minimal implémentant manuellement le protocole RSC. | [email protected] |
nextjs-target | nextjs-app/ | Application Next.js standard utilisant App Router. | [email protected] (impl. react-server) |
attacker | exploit/ | Environnement Python contenant les scripts d'exploitation. | N/A |
La vulnérabilité provient d'une désérialisation non sécurisée (CWE-502) dans l'analyseur du protocole Flight. En injectant une charge utile multipart spécialement conçue contenant une structure de morceau « factice », un attaquant peut :
.then d'un objet de type promesse.$B).Function() pour compiler et exécuter du JavaScript arbitraire (par exemple, child_process.execSync).Cloner le dépôt :
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Construire et lancer le laboratoire :
docker-compose up -d --build
Attendez que les conteneurs soient complètement initialisés. Le conteneur Next.js peut prendre quelques minutes pour terminer sa première compilation.
La logique d'exploitation est encapsulée dans exploit/exploit.py. Vous pouvez exécuter les attaques depuis votre machine hôte (si Python est installé) ou directement depuis le conteneur attacker.
Accéder au shell de l'attaquant :
docker-compose exec attacker bash
Installer les dépendances :
pip install -r requirements.txt
Attaquer la cible A (Vanilla React) :
python exploit.py http://vanilla-target:4000/rsc vanilla
Attaquer la cible B (Next.js) :
python exploit.py http://nextjs-target:3000/ nextjs
L'exploit tente de créer un fichier nommé pwned.txt dans le répertoire /tmp du serveur victime. Pour vérifier le succès :
# Check Vanilla Server
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Check Next.js Server
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
En cas de succès, vous verrez la liste du fichier. Si l'exploit échoue, le fichier n'existera pas.
Pour corriger cette vulnérabilité dans les environnements de production :
react-server-dom-webpack (et les packages associés) vers les versions 19.0.1, 19.1.2 ou 19.2.1+."$1:__proto__" ou des utilisations inhabituelles de "$@" dans les corps multipart.Projet universitaire - Audit de sécurité et recherche de vulnérabilités