Baptiste Zahnow

Créer par: Baptiste Zahnow, 15/12/2025 17:12
Tables des matières
La faille React2Shell correspond à une vulnérabilité critique de type Remote Code Execution (RCE) dans l’écosystème React Server Components (RSC), exploitée sans authentification par de nombreux attaquants dès sa publication en décembre 2025. Elle est suivie sous l’identifiant CVE-2025-55182 et porte une note CVSS de 10.0 (maximum).
React Server Components (RSC) utilisent un protocole interne appelé Flight, permettant au serveur de recevoir et désérialiser des données complexes envoyées par le client. La faille survient lorsque le serveur désérialise ces données sans les valider correctement, ce qui ouvre la porte à une exploitation par des données malicieuses.
Pourquoi c'est grave ?
L’attaque repose sur une désérialisation non sécurisée : l’attaquant envoie un objet JSON construit spécialement qui, au lieu d’être interprété comme des données, contourne les contrôles internes et permet d’injecter du code exécuté par le serveur.
À ne pas utiliser sur des systèmes que tu ne possèdes pas ou n'as pas la permission de tester - exploitation non autorisée = illégale.
Voici un extrait de payload réel observé dans un PoC, utilisé pour démontrer l’exploitation. Il montre comment une requête multipart peut déclencher une commande sur le serveur :
payload.js
copy code
const payload = {
'0': '$1',
'1': {
'status': 'resolved_model',
'reason': 0,
'_response': '$4',
'value': '{"then":"$3:map","0":{"then":"$B3"},"length":1}',
'then': '$2:then'
},
'2': '$@3',
'3': [],
'4': {
'_prefix': 'process.mainModule.require("child_process").execSync("touch /tmp/rce_poc");',
'_formData': {
'get': '$3:constructor:constructor'
},
'_chunks': '$2:_response:_chunks',
}
};
Pendant la désérialisation, les références d'objets telles que $1, $3 et $4 sont résolues de manière dynamique. L'attaquant injecte un objet de réponse conçu contenant une chaîne de code malveillant dans un champ _prefix et manipule _formData.get pour le résoudre en $3:constructor:constructor.
En JavaScript, l'accès à constructor.constructor aboutit finalement au constructeur Function, qui permet l'exécution dynamique de code. En abusant également d'une propriété then pour déclencher le mécanisme de résolution des promesses de React, la charge utile amène le runtime à évaluer le code injecté.
Cela entraîne l'exécution d'une commande shell via child_process.execSync de Node.js, permettant ainsi l'exécution de code à distance.

Il s’agit du principe utilisé par de nombreux PoCs sur des dépôts publics (ex. zr0n/react2shell PoC sur GitHub).
Après la publication des PoC, différents types d’exploits ont été observés via cette vulnérabilité :

React et Next.js ont publié des versions corrigées :
Mettre à jour tous les composants vulnérables est essentiel.
La faille React2Shell est une des vulnérabilités les plus sévères et impactantes découvertes récemment dans l’écosystème JavaScript. Grâce à une erreur de désérialisation dans React Server Components, des attaquants peuvent exécuter du code arbitraire sur des serveurs, sans authentification, avec des conséquences potentiellement dévastatrices pour les applications et les infrastructures exposées.
<- Précedent
// 01
Suivant ->
// 02
Ce site utilise un cookie strictement nécessaire au fonctionnement de l’espace commentaires.
Ce cookie est créé lors de la connexion via Google afin de maintenir votre session et vous permettre de publier des commentaires.
Aucun cookie publicitaire ou de suivi n’est utilisé.