Divulgation de vulnérabilités de DoS et d’exposition du code source dans React Server Components
(react.dev)- De nouvelles vulnérabilités de déni de service (DoS) et d’exposition du code source ont été découvertes et rendues publiques dans React Server Components
- Ces vulnérabilités ne permettent pas d’exécution de code à distance (RCE), mais elles peuvent entraîner un arrêt du serveur ou une fuite de code
- Les packages concernés sont
react-server-dom-webpack,react-server-dom-parcel,react-server-dom-turbopack, en versions 19.0.0~19.2.2, et les versions corrigées sont 19.0.3, 19.1.4, 19.2.3 - La vulnérabilité DoS (CVE-2025-55184, CVE-2025-67779) peut provoquer une boucle infinie via une requête HTTP malveillante, et la vulnérabilité d’exposition du code source (CVE-2025-55183) peut renvoyer une partie du code d’une fonction serveur
- L’équipe React recommande une mise à niveau immédiate et explique que cette divulgation supplémentaire correspond à un processus normal du cycle de réponse sécurité
Aperçu des vulnérabilités nouvellement divulguées
- Les chercheurs en sécurité ont découvert deux vulnérabilités supplémentaires pendant la validation du correctif de la vulnérabilité critique publiée la semaine dernière
- Les nouvelles vulnérabilités ne permettent pas l’exécution de code à distance (RCE), et le patch React2Shell reste valable
- Les vulnérabilités nouvellement divulguées sont les suivantes
- Déni de service (DoS) — CVE-2025-55184, CVE-2025-67779 (CVSS 7.5, gravité élevée)
- Divulgation de code source — CVE-2025-55183 (CVSS 5.3, gravité moyenne)
- L’équipe React recommande une mise à niveau immédiate
Incomplétude du correctif précédent
- Les correctifs déployés la semaine dernière dans les versions 19.0.2, 19.1.3, 19.2.2 étaient incomplets, ce qui nécessite une mise à jour supplémentaire
- La correction complète est incluse dans les versions 19.0.3, 19.1.4, 19.2.3
- Il faut suivre les instructions de mise à jour du message précédent
- Des informations supplémentaires seront publiées une fois le déploiement du correctif terminé
Packages et versions affectés
- Les vulnérabilités sont présentes dans les mêmes packages et versions que CVE-2025-55182
- Versions affectées : 19.0.0~19.2.2
- Packages affectés :
react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack
- Versions corrigées : 19.0.3, 19.1.4, 19.2.3
- Les applications qui n’utilisent pas de serveur ou ne prennent pas en charge React Server Components ne sont pas touchées
Schéma classique des divulgations de vulnérabilités ultérieures
- Après la divulgation d’une CVE critique, une analyse supplémentaire des chemins de code associés révèle souvent d’autres vulnérabilités
- Des exemples de CVE supplémentaires signalés après Log4Shell sont mentionnés
- Ce type de divulgation supplémentaire signifie que la réponse de sécurité fonctionne normalement
Frameworks et bundlers affectés
- Les frameworks et bundlers suivants incluent ou dépendent du package React vulnérable :
nextreact-routerwaku@parcel/rsc@vitejs/plugin-rscrwsdk
- Il faut suivre les instructions de mise à jour du message précédent
Mesures temporaires des hébergeurs
- Plusieurs fournisseurs d’hébergement et équipes associées ont mis en place des mesures de mitigation temporaires
- Néanmoins, il ne faut pas se reposer sur ces mesures et une mise à jour immédiate est nécessaire
Consignes liées à React Native
- Les utilisateurs de React Native seul n’ont pas besoin de mesures supplémentaires
- En environnement monorepo, seuls les packages suivants doivent être mis à jour :
react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack
- Les packages
reactetreact-domn’ont pas besoin d’être mis à jour - Les détails associés sont référencés dans l’issue React Native sur GitHub
Haute gravité : déni de service (DoS)
- CVE-2025-55184, CVE-2025-67779, CVSS 7.5
- Si une requête HTTP malveillante est envoyée vers le point de terminaison d’une fonction serveur React, une boucle infinie peut se produire lors de la désérialisation
- Le processus serveur peut être arrêté et monopoliser excessivement le CPU
- Même sans implémenter directement un point de terminaison de fonction serveur, une application prenant en charge React Server Components peut être vulnérable
- Le patch publié aujourd’hui corrige ce problème en empêchant les boucles infinies
- La correction initiale était incomplète, puis la vulnérabilité additionnelle CVE-2025-67779 est venue la combler
Gravité moyenne : exposition du code source
- CVE-2025-55183, CVSS 5.3
- Une requête HTTP malveillante peut renvoyer une partie du code source d’une fonction serveur
- Cela peut se produire quand des arguments de type chaîne sont explicitement ou implicitement exposés par la fonction serveur
- Dans le code d’exemple, des valeurs secrètes codées en dur telles que des clés de connexion de base de données peuvent être exposées
- Le patch corrige cela en empêchant la transformation en chaîne du code source de la fonction serveur
- L’exposition est limitée au code interne de la fonction serveur, et les secrets d’exécution (
process.env.SECRET, etc.) ne sont pas impactés - La validation doit être vérifiée sur la base du bundle de production
Chronologie
- 3 décembre : Andrew MacPherson signale une fuite de code source à Vercel et au programme Meta Bug Bounty
- 4 décembre : RyotaK signale une vulnérabilité DoS
- 6 décembre : L’équipe React constate les deux problèmes et lance l’enquête
- 7 décembre : Rédaction du patch initial et élaboration du plan de validation
- 8 décembre : Notification aux hébergeurs et aux projets open source
- 10 décembre : Mise en place des mesures de mitigation et validation du patch achevée
- 11 décembre : Shinsaku Nomura signale un DoS supplémentaire, publication des CVE-2025-55183, 55184 et 67779
Signalements
- Andrew MacPherson (AndrewMohawk) — signalement de l’exposition de code source
- RyotaK (GMO Flatt Security Inc) et Shinsaku Nomura (Bitforest Co., Ltd.) — signalements de vulnérabilités de déni de service
1 commentaires
Avis sur Hacker News
Les React Server Components (RSC) m’ont toujours semblé inconfortables
Parce qu’en regardant uniquement le code JavaScript, il est difficile de distinguer ce qui s’exécute côté client de ce qui s’exécute côté serveur
En plus, leur mise en œuvre nécessite un mécanisme RPC de sérialisation profond, opaque pour les développeurs, ce qui augmente le risque de failles de sécurité
Mais avec le passage à l’app router, c’est devenu confus. Comme le code peut s’exécuter des deux côtés, des objets comme Headers ne sont pas toujours présents, et il devient difficile de savoir quoi s’exécute où
Quand React+Next fonctionne bien, cela ressemble à de la magie, mais lorsqu’on travaille en équipe, le problème est que la prévisibilité disparaît progressivement
Les rôles y sont clairs, le travail est simple, et je pense que c’est le choix le plus sûr pour la plupart des projets
Pour une landing page ou une page marketing, le SSR est utile, mais pour une application comme un tableau de bord SaaS classique, le gain est presque nul par rapport à la complexité ajoutée
Est-ce que React attire simplement plus l’attention parce qu’il est populaire, ou bien est-il structurellement plus risqué ?
J’ai regardé les RSC la semaine dernière, et la complexité était énorme, avec presque pas de documentation
React dit qu’il s’agit encore d’une fonctionnalité expérimentale, mais NextJS l’a déjà largement déployée
On dirait qu’il y aura encore d’autres problèmes de sécurité, et le système de build de Next était tellement complexe qu’il était difficile à déboguer
Le coût est bien trop élevé pour les bénéfices obtenus
C’est aussi pour ça que j’ai quitté Next. La charge cognitive était trop forte pour trop peu de gains
Pas seulement pour les RSC : de manière générale, les guides clairs sont arrivés tard, et même des outils comme CRA n’ont pas vraiment été reconnus officiellement
La documentation de useEffect ne s’est améliorée que récemment, mais bien trop tard
Même en 2025, alors qu’on l’utilise toujours en production, il manque encore une documentation claire
Le principe central des SPA, c’était « envoyer toute l’application côté client et n’échanger avec le serveur que des données »
Comme avec les anciens .aspx Web Forms, chaque clic et chaque saisie sont envoyés au serveur, puis le DOM modifié est renvoyé
On a en quelque sorte fait marche arrière, ce qui est assez absurde
C’est dommage d’avoir perdu le sens du « bon outil pour le bon usage »
Dans cette annonce de sécurité, la phrase qui a le plus retenu mon attention était : « lorsqu’un CVE critique est découvert, des vulnérabilités de suivi apparaissent souvent »
Avant même d’expliquer l’étendue du problème, son impact ou les moyens d’atténuation, cela donnait l’impression de vouloir justifier le CVE, ce qui était inquiétant
Article Wikipédia associé
Il y a 15 ans, Opa tentait déjà quelque chose de similaire
Le projet séparait automatiquement le code client et serveur, et introduisait une syntaxe proche de JSX
Mais en renforçant l’analyse de sécurité, le compilateur est devenu énorme, et on a fini par comprendre que la séparation claire était plus importante que le concept d’application unifiée
Peut-être qu’un jour les LLM généreront ce genre de code automatiquement, mais pour l’instant, une structure simple me paraît préférable
Des correctifs sont en cours pour empêcher des problèmes comme la pollution de prototype en JS,
toStringsur les fonctions ou la surcharge de PromiseLes RSC distinguent les environnements via une vérification statique comme
import "server-only"ouimport "client-only", donc l’approche est structurellement sûreReact était mieux à l’origine, quand il restait petit et simple dans son rôle de View du MVC
Aujourd’hui, il embarque trop de fonctionnalités et donne une impression de surpoids
git checkout v15.0.0Les RSC n’auraient jamais dû exister au départ
Pour la plupart des applications, rendre du HTML côté serveur suffit largement, et les cas où un SPA est nécessaire sont très rares
Les RSC n’ont fait qu’ajouter de la complexité et des failles de sécurité
Des projets comme Bun et Vercel vendent l’illusion d’une utopie JavaScript où tout fonctionne parfaitement, donc cette tendance ne risque pas de disparaître facilement
J’avais déjà débattu des RSC avec Dan Abramov sur X
Lui parlait d’une fonctionnalité innovante, mais moi j’avais dit que c’était un pistolet braqué sur son propre pied. Et au final, la réalité semble m’avoir donné raison
En revanche, le risque de bugs au niveau du protocole a été sous-estimé. Cette vulnérabilité se concentre sur le protocole de sérialisation
La communauté sécurité ne commence à regarder cela en profondeur que maintenant, et il aurait sans doute fallu que l’équipe réagisse plus tôt
React aussi est passé d’une simple bibliothèque de rendu à un runtime, avec une explosion de la complexité
À l’inverse, Vue et Vite me paraissent bien plus élégants dans leur conception → site personnel d’Evan You
Parfois, des tentatives audacieuses finissent par être de vrais coups de génie
Si les RSC sont une tentative du frontend de dévorer le backend, alors HTMX représente l’inverse
HTMX maintient la frontière client–serveur, ce qui protège le backend, mais expose le frontend à un risque de XSS
Article associé
L’équipe Next a annoncé une nouvelle mise à jour de sécurité → NextJS Security Update 2025-12-11
Les versions 14.x, 15.x et 16.x sont concernées