
react CVE-2025-55182
Sévérité : Critique — CVSS 10.0
CWE : CWE-502 (Désérialisation de données non fiables)
Éditeur : Meta (Facebook)
Divulgué : 3 décembre 2025
CVE-2025-55182 est une vulnérabilité d'exécution de code à distance (RCE) non authentifiée de sévérité maximale dans React Server Components (RSC), surnommée React2Shell. La faille réside dans la façon dont React décode les charges utiles envoyées aux points de terminaison des fonctions serveur React via le protocole Flight. Un attaquant peut envoyer une seule requête HTTP POST spécialement conçue à un serveur vulnérable et exécuter du code arbitraire — sans identifiants ni interaction de l'utilisateur.
Les applications qui n'exposent pas de points de terminaison explicites de fonctions serveur restent vulnérables si elles prennent en charge React Server Components.
| Paquet | Versions vulnérables | Versions corrigées |
|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
Frameworks concernés (lorsqu'ils utilisent des paquets React vulnérables) : Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, plugin RSC de Vite.
| Metric | Value |
|---|---|
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| User Interaction | None |
| Scope | Changed |
| Confidentiality | High |
| Integrity | High |
| Availability | High |
| Overall Score | 10.0 (Critical) |
Vector string : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
React Server Components utilisent un format de transmission binaire appelé protocole Flight pour diffuser les arbres de composants du serveur vers le client. Le même protocole gère les fonctions serveur (anciennement Server Actions) — des points de terminaison appelables qui acceptent des arguments sérialisés depuis le navigateur.
La vulnérabilité se situe dans le désérialiseur : lors du traitement d'une charge utile Flight, React peut être amené à instancier des objets serveur arbitraires, conduisant à une RCE complète. Comme le point de terminaison Flight est exposé par défaut dès que RSC est activé, et qu'aucune barrière d'authentification n'existe au niveau du protocole, l'exploitation ne nécessite qu'un accès réseau au serveur.
Le modèle inclus CVE-2025-55182.yaml utilise trois méthodes de détection complémentaires.
Envoie un POST minimal avec Content-Type: text/x-component au chemin racine. Un serveur RSC vulnérable (ou accessible) répond avec le même type de contenu et un corps de flux Flight dont les lignes commencent par des identifiants de ligne alphanumériques suivis de deux-points (par ex. 0:, 1:) ou par des sigils de référence React ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Condition de correspondance : HTTP 200 + en-tête text/x-component + regex de flux Flight dans le corps.
Next.js signale les requêtes RSC via l'en-tête RSC: 1 et le paramètre de requête ?_rsc=. Cette requête imite une prélecture du navigateur pour confirmer que le point de terminaison Flight de l'App Router est accessible.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Condition de correspondance : HTTP 200 + en-tête text/x-component.
Envoie une charge utile Flight minimale et malformée accompagnée d'un en-tête Next-Action (le mécanisme utilisé pour invoquer les fonctions serveur). Un serveur vulnérable tente de désérialiser la charge utile ; même une réponse d'erreur incluant des en-têtes spécifiques à RSC confirme l'existence du point de terminaison.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Condition de correspondance : HTTP 200/400/500 + en-tête text/x-component ou x-action-revalidated.
Analyse les fichiers *.json locaux (par ex. package-lock.json, yarn.lock) à la recherche des noms de paquets vulnérables combinés à une regex de version correspondant à 19.0.0, 19.1.0, 19.1.1 ou 19.2.0. Utile pour auditer des dépôts ou des pipelines CI sans émettre aucun trafic réseau.
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
Mettez à jour immédiatement vers une version corrigée :
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Versions minimales sûres par branche :
| Branche | Version minimale sûre |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Mesures d'atténuation temporaires (si la mise à jour n'est pas immédiatement possible) :
text/x-component sur les requêtes POST entrantes (des règles Google Cloud Armor sont publiquement disponibles pour cette CVE).package-lock.json, node_modules ou d'un SBOM.Ce modèle est destiné uniquement aux tests de sécurité autorisés et à l'évaluation de vulnérabilités. L'exécuter contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite de test peut être illégal. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.