Lachlan Davidson à découvert une vulnérabilité critique (score CVSS 10) surnommée React2Shell le 29 novembre 2025.
React2Shell, référencé sous le code CVE-2025-55182, affecte la bibliothèque React.js créée initialement par Facebook, cette vulnérabilité peut permettre à un attaquant non authentifié de créer des requêtes spécialement conçues vers n'importe quelle fonction Serveur, entrainant une déserialisation de React, et ainsi une exécution de code à distance sur le serveur.
Impact
Elle affecte les versions 19.0,19.1.0,19.1.1,19.2.0 des bibliothèques :
Un correctif est disponible en version 19.0.1, 19.1.2 et 19.2.1.
Plusieurs frameworks utilisant React.js sont également impactés tels que :
- react-router
- waku
- @parcel/rsc
- @vitejs/plugin-rsc
- rwsdk
Les versions vulnérables dépendent uniquement de la version react.js utilisée.
Cas spécifique Next.js framework
Lachlan Davidson a également souhaité référencer une vulnérabilité spécifiquement dédiée à next.js puisque next.js n’inclut pas React comme une dépendance traditionnelle, ils le distribuent sous forme vendored, impliquant que de nombreux outils de gestion de dépendances ne détectent pas automatiquement la vulnérabilité.
La vulnérabilité est référencée sous le code CVE-2025-66478 (considérée comme doublon par la NVD)
Les versions vulnérables de Next.js sont celles supérieures ou égales à 14.3.0-canary.77, 15 et 16.
Des correctifs sont disponibles en versions v16.0.7, v15.5.7, v15.4.8, v15.3.6, v15.2.6, v15.1.9, v15.0.5, 15.6.0-canary.58, 16.1.0-canary.12.
Analyse technique
React Server Function permet au client des appels de fonction vers un serveur. React fournit des points d'intégration et des outils que les frameworks et bundlers utilisent afin de permettre au code React de s'exécuter à la fois côté client et côté serveur.
Il traduit les requêtes client en requêtes HTTP qui sont ensuite envoyées au serveur. Sur le serveur, React traduit la requête HTTP en requête fonction puis retourne les données nécessaires vers le client.
React2shell, permet l’exécution de code dans le mécanisme React Server Components / React Flight, qui peut permettre à un attaquant de faire exécuter du JavaScript arbitraire sur le serveur en envoyant une réponse Flight malformée grâce à des failles dans le désérialiseur de React.
Elle exploite trois principes fondamentaux du protocole React Flight :
- Les objets Flight "Chunk" sont thenables. N’importe quel chunk possède un .then, donc peut être await-é.
- Les références Flight $... permettent à l’utilisateur de diriger la traversée de propriétés. Exemple : "$1:constructor:constructor" force React à évaluer chunk1.value.constructor.constructor, ce qui peut renvoyer Function.
- React chaîne automatiquement les .then() lors de l’attente (await). Ainsi si l’attaquant contrôle .then, il peut faire exécuter du code.
- Le code du désérialiseur accédait sans restriction à la propriété _response, ce qui permettait d’injecter une fausse structure interne.
En combinant ces trois éléments, un attaquant peut faire exécuter du JavaScript arbitraire à travers le constructeur Function() et ainsi obtenir un shell.
Proof of Concept
Plusieurs PoC sont déjà disponibles sur internet, le CERT illicium vous suggère d'utiliser celui du chercheur Moritz Sanft : https://github.com/msanft/CVE-2025-55182
Tester la vulnérabilité
Déployez une version volontairement vulnérable en local :
Exploitation de la vulnérabilité
Installer un environnement virtuel python python3 -m venv vpy3-poc; source vpy3-poc/bin/activate, puis installer le module pour réaliser des requêtes HTTP pip install requests. Vous pouvez lancer le test du PoC sur votre application vulnérable en local.
Le premier argument passé est l'adresse URL cible, un second argument optionnel correspond à la commande envoyée.
Si l'application est vulnérable, le PoC renvoie le résultat de la commande envoyé au serveur, par défaut id
Le PoC affiche une erreur si l'application n'est pas vulnérable :
Nucleï
Vérification de la vulnérabilité via un template de scan Nucleï disponible sur leur dépot Github.
Indicator of Compromise
Indicateurs réseau
- Requêtes HTTP POST vers les endpoints de l’application contenant les en-têtes next-action ou rsc-action-id
- Corps de requête contenant des motifs $@
- des en-têtes tels que Next-Action (ou des identifiants d’actions RSC)
- des corps de requête multipart/form-data contenant des marqueurs de payload de type Flight et des motifs resolved_model
Cryptominer
Le CERT illicium a noté, plusieurs entités exploitent cette vulnérabilité afin d'installer un cryptominer
Monero via c3pool
autres Cryptominer