
React2Shell (CVE-2025-55182) proof-of-concept (PoC) exploit démontrant une vulnérabilité CRITIQUE d'exécution de code à distance dans les frameworks web modernes utilisant React Server Components (RSC).
React2Shell est une preuve de concept (PoC) qui démontre une vulnérabilité CRITIQUE d'exécution de code à distance (RCE) dans les frameworks web modernes utilisant React Server Components (RSC).
Cette PoC cible CVE-2025‑55182, une vulnérabilité CVSS 10.0 qui permet à des attaquants distants non authentifiés d'exécuter des commandes système arbitraires via une désérialisation non sécurisée dans l'implémentation de React Server Components.
React2Shell exploite une faille dans la façon dont React Server Components traite les entrées non fiables pendant la phase de réhydratation.
La vulnérabilité provient des packages sous‑jacents react-server-dom-* responsables de la sérialisation et de la désérialisation des arbres de composants.
Les applications utilisant des versions affectées de React Server Components peuvent traiter des charges utiles malveillantes d’une manière qui conduit à l’exécution de code à distance (RCE) sous les privilèges du processus serveur.
Un attaquant peut :
Si votre déploiement correspond à l’une des versions vulnérables ci‑dessous et expose des points de terminaison RSC, vous êtes vulnérable.
La vulnérabilité est présente dans les versions 19.0.0, 19.1.0, 19.1.1 et 19.2.0 de :
react-server-dom-parcelreact-server-dom-webpackreact-server-dom-turbopackCes packages sont intégrés dans plusieurs frameworks, notamment :
15.0.0 à 16.0.614.3.0-canary.76RSC (v19.0.0–19.2.0), comme :
ViteParcelReact RouterRedwoodSDKWakuTout framework intégrant l’implémentation vulnérable de React Server Components est potentiellement affecté.
React2Shell inclut un générateur de charge utile modulaire conçu pour contourner les restrictions courantes de Node.js et les règles WAF :
Injection Standard
process.mainModule.requireNext.js / Webpack.Contournement Asynchrone
import() dynamique pour les environnements ESM stricts où require n’est pas disponible.Obscurcissement
child_process) dans des tampons hexadécimaux pour contourner les signatures WAF naïves.Repli de Module
module.createRequire pour charger des modules dans des contextes alternatifs.Ciblage Universel
//RSC/foo.txtNode.js v18.0.0 ou supérieur.git clone https://github.com/rsch-io/CVE-2025-55182-React2Shell.git
cd CVE-2025-55182-React2Shell
npm install form-data
React2Shell est destiné à être importé en tant que module dans vos propres scripts de test.
Créez un fichier nommé exploit.js :
const React2Shell = require('./src/react2shell');
// Initialize with target base URL
const target = new React2Shell('http://localhost:3000');
// Execute command using the "standard" strategy
// Arguments: execute(command, endpoint, strategy)
target.execute('whoami', '/', 'standard');
Exécutez ensuite :
node exploit.js
Remarque
endpointdoit être défini sur une route activée pour RSC (par exemple,/,/RSC/foo.txt, ou des points de terminaison RSC spécifiques au framework).strategypeut être modifié (par exemple,standard,async,obfuscated, ou toute autre stratégie implémentée dansreact2shell).
Waku et d’autres frameworks exposent souvent la gestion RSC sur des routes spécifiques :
// Target a Waku application
// Note: Use 'async' strategy as Waku often runs in strict ESM
target.execute('ls -la', '/RSC/foo.txt', 'async');
Si le serveur bloque les chaînes contenant child_process, vous pouvez utiliser la stratégie obfuscated :
target.execute('cat /etc/passwd', '/', 'obfuscated');
Mettez à jour immédiatement. Les versions mises à jour de React et des frameworks en aval affectés incluent un traitement renforcé des entrées utilisateur pour éviter les comportements non souhaités.
Tous les utilisateurs doivent passer à une version corrigée dès que possible.
Voici la liste définitive des versions corrigées. Si votre version déployée est inférieure à celles‑ci, vous êtes vulnérable.
Avertissement pour les utilisateurs de Next.js 14 Si vous utilisez
Next.js 14.3.0-canary.77ou une version canary ultérieure, vous êtesvulnérable.
Vous devez immédiatement revenir à la dernière version stable14.x, car la vulnérabilité affecte l’implémentation expérimentale RSC présente dans ces builds canary.
Ce projet est fourni uniquement à des fins éducatives et de tests de sécurité autorisés.
Utiliser cet outil contre des systèmes sans autorisation explicite est illégal et contraire à l’éthique.
Les auteurs déclinent toute responsabilité en cas d’utilisation abusive ou de dommages causés par cet outil.
Ce projet est sous licence MIT License. Consultez le fichier LICENSE pour plus de détails.
| Métrique | Détails |
|---|
| Gravité | CRITIQUE (10.0 / 10.0) |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Vecteur d’attaque | Réseau (distant) |
| Interaction utilisateur | Aucune |
| Logiciel / Package | Branche / Type | 🛡️ Version(s) Corrigée(s) / Sûre(s) |
|---|
React | Stable | 19.0.1, 19.1.2, 19.2.1 |
Next.js | v15 (Stable) | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 |
Next.js | v16 (Stable) | 16.0.7 |
Next.js | Canary | 15.6.0-canary.58 |