Se rendre au contenu

React2Shell - CVE-2025-55182

L'écosystème React.js et Next.js secoué par une vulnérabilité critique et exploitée activement. La KB illicium détaille l'attaque et les moyens d'y remédier.
15 décembre 2025 par
React2Shell - CVE-2025-55182
Loick

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 :

  1. Les objets Flight "Chunk" sont thenables. N’importe quel chunk possède un .then, donc peut être await-é.
  2. 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.
  3. 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.
  4. 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

Liste de C2


in Blog