flawopen.com/Teardowns/cve-2025-55182-react-server-components-rce
CVE-2025-55182 : React2Shell RSC
CVE-2025-55182 est une exécution de code à distance sans authentification lors du décodage de payloads React Server Components (RSC). React a confirmé le défaut ; Google Threat Intelligence a documenté des campagnes avec téléchargeurs, backdoors et mineurs.[1], [4], [5]
Imaginez une réceptionniste qui consulte un répertoire de services autorisés. Une recherche défectueuse traite un nom hérité du modèle comme si le responsable l’avait enregistré. Le correctif de React vérifie que l’export demandé appartient au module lui-même ; l’avis public ne révèle pas la séquence complète de l’exploitation. Mettez à jour les paquets concernés.[1]
Concepts Clés et Termes
React Server Components (RSC)- React Server Components : protocole et paquets React pour le rendu serveur et l’échange de données Flight.[1]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-502
- CISA KEV — ajouté le 2025-12-05 — CVE-2025-55182
Analyse de Cause Racine
React confirme que la RCE venait du décodage défectueux de payloads envoyés aux endpoints React Server Functions ; la prise en charge RSC pouvait suffire à exposer l’application. L’avis initial retenait des détails d’exploitation. Le patch amont ajoute un contrôle de propriété propre dans requireModule() et une gestion d’erreurs multipart. Cet extrait montre un changement concret, sans reproduire tout le décodeur ni prétendre qu’un seul contrôle explique toute la chaîne.[1], [2]
Versions affectées et périmètre de déploiement de React2Shell
| Composant ou déploiement | Évaluation du périmètre | Mesure corrective |
|---|---|---|
react-server-dom-webpack, react-server-dom-parcel ou react-server-dom-turbopack en 19.0, 19.1.0, 19.1.1 ou 19.2.0. | La prise en charge RSC côté serveur peut exposer une application même sans endpoint Server Function déclaré ; la frontière serveur doit être accessible. | Mettez à niveau la branche du paquet vers 19.0.1, 19.1.2 ou 19.2.1 ou une version ultérieure, selon le cas. Reconstruisez et redéployez l’artefact serveur. |
| Next.js App Router sur les versions 15.x/16.x affectées ou sur 14.3.0-canary.77 et les canaries suivantes. | Les intégrations affectées du framework embarquent les paquets RSC vulnérables. Ne concluez pas à l’absence de risque parce que l’application ne déclare pas son propre endpoint Server Function. | Utilisez la version corrigée de la branche correspondante : 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 ou 16.0.7 ou ultérieure. Ce sont les versions minimales consignées dans l’avis cité ; vérifiez la branche actuelle de l’éditeur avant le déploiement. |
| Application React côté client uniquement, sans prise en charge RSC côté serveur. | Hors du périmètre documenté de la CVE, car elle ne possède pas de frontière de décodage serveur. | Cette configuration n’exige pas le correctif serveur React2Shell. Réévaluez le périmètre si RSC ou des composants serveur sont ajoutés. |
| Déploiement déclaré corrigé. | La version du manifeste ne prouve pas que chaque région, service de prévisualisation, worker ou conteneur en cours d’exécution utilise l’artefact corrigé. | Vérifiez les digests d’image et les versions résolues en production, en prévisualisation et sur les workers ; examinez toute période d’exposition antérieure. |
| Versions Next.js recommandées par branche dans la mise à jour React du 2026-01-26 | Les recommandations ultérieures de React incluent des versions de sécurité plus récentes ; ce ne sont pas les versions minimales qui ont corrigé initialement CVE-2025-66478. Les avis RSC associés et les branches maintenues peuvent modifier la cible de mise à jour. | Pour les avis RSC associés CVE-2025-55183, CVE-2025-55184, CVE-2025-67779 et CVE-2026-23864, React a indiqué les versions corrigées 19.0.4, 19.1.5 et 19.2.4. Les recommandations Next.js datées du 2026-01-26 étaient : 14.2.35 pour 13.3.x–14.x stable ; 15.0.8 pour 15.0.x ; 15.1.12 pour 15.1.x ; 15.2.9 pour 15.2.x ; 15.3.9 pour 15.3.x ; 15.4.11 pour 15.4.x ; 15.5.10 pour 15.5.x ; 16.0.11 pour 16.0.x ; et 16.1.5 pour 16.1.x. Il s’agit de recommandations ultérieures pour des problèmes associés, et non des versions minimales de Next.js corrigeant CVE-2025-66478. Avant le déploiement, consultez l’avis fournisseur le plus récent et vérifiez la branche prise en charge. |
CVE-2026-23869 — déni de service RSC (2026-04-08). | React indique que des requêtes HTTP spécialement conçues vers les points de terminaison Server Function peuvent consommer excessivement le processeur pendant une minute au plus avant de produire une erreur interceptable. Les branches concernées des paquets react-server-dom-* vont jusqu’à 19.0.4, 19.1.5 et 19.2.4. | React indique que 19.0.5, 19.1.6 et 19.2.5 corrigent respectivement le problème. |
CVE-2026-23870 — déni de service RSC (2026-05-06). | React indique que des requêtes HTTP spécialement conçues peuvent provoquer des erreurs de mémoire insuffisante ou une consommation excessive du processeur. Les branches concernées des paquets react-server-dom-* vont jusqu’à 19.0.5, 19.1.6 et 19.2.5. | React indique que 19.0.6, 19.1.7 et 19.2.6 corrigent respectivement le problème. |
CVE-2026-44907 — déni de service Server Functions (2026-07-21). | React indique que des requêtes HTTP spécialement conçues peuvent provoquer des erreurs de mémoire insuffisante ou une consommation excessive du processeur. Les branches concernées des paquets react-server-dom-* vont jusqu’à 19.0.7, 19.1.8 et 19.2.7. | React indique que 19.0.8, 19.1.9 et 19.2.8 corrigent respectivement le problème. |
Déroulement de l'Attaque Étape par Étape
Code Source : Vulnérable vs Sécurisé
Cet extrait exact du patch amont ne renvoie qu’une exportation propre du module ; il ne reproduit pas toute la faille du décodeur et ne constitue pas un correctif autonome. Mettez à jour React Server Components ou le framework concerné.[2], [1]
Extrait source: Méthode requireModule() du client Parcel de React
export function requireModule<T>(metadata: ClientReference<T>): T {
const moduleExports = parcelRequire(metadata[ID /* module id */]);
return moduleExports[metadata[NAME]];
}
export function requireModule<T>(metadata: ClientReference<T>): T {
const moduleExports = parcelRequire(metadata[ID /* module id */]);
if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
return moduleExports[metadata[NAME]];
}
return (undefined: any);
}
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Vérifiez lockfiles, images et bundles déployés.[1], [4]
- ✓Passez à React RSC 19.0.1, 19.1.2 ou 19.2.1 ou ultérieur et aux versions corrigées du framework. Pour les avis RSC ultérieurs, consultez la matrice et mettez à jour les paquets
react-server-dom-*résolus vers la dernière version corrigée applicable ; les frameworks peuvent intégrer ces paquets.[1], [4], [8], [9], [10] - ✓Reconstruisez et redéployez ; WAF est temporaire, pas un correctif.[1]
- ✓Vérifiez les versions réellement exécutées.[1]
- ✓Après exposition non corrigée, enquêtez sur les processus et connexions puis renouvelez les secrets.[5], [6]
Sources
- React Security Advisory — CVE-2025-55182
- React upstream patch — commit 7dc903c
- NVD — CVE-2025-55182, CWE-502 and KEV status
- Next.js Security Advisory — CVE-2025-66478
- Google Threat Intelligence — React2Shell exploitation
- CISA Known Exploited Vulnerabilities Catalog
- Avis de sécurité React — vulnérabilités RSC supplémentaires
- Avis de sécurité React — CVE-2026-23869 (DoS RSC)
- Avis de sécurité React — CVE-2026-23870 (DoS RSC)
- Avis de sécurité React — CVE-2026-44907 (DoS Server Functions)