TL; DR
React2Shell (CVE-2025-55182) crée un élément critique risque RCE à travers Composants serveur React (RSC) et les cadres qui les intègrent, notamment Next.jsParce que la vulnérabilité réside à l'intérieur de LRC Au niveau de la couche de sérialisation et de désérialisation, les attaquants peuvent envoyer une requête HTTP spécialement conçue et déclencher exécution de code à distance non authentifié, même lorsque les équipes utilisent des configurations de framework par défaut. Next.js Les applications sont les plus exposées car elles acceptent et traitent les données. React Flight Les données sont transmises par défaut via HTTP.
Ce défaut affecte plusieurs versions de Packages serveur ReactDe plus, les attaquants n'ont pas besoin de logique applicative personnalisée pour l'exploiter. Les chercheurs en sécurité démontrent une fiabilité proche de 100 %, et les premières analyses révèlent que de nombreux environnements cloud sont vulnérables. Next.js les instances. Les équipes doivent corriger immédiatement. et valider leur écosystème complet pour réduire le Risque d'exécution de code à distance (RCE) lié à React2Shell (CVE-2025-55182).
Une vulnérabilité critique signalée le 29 novembre via le programme de primes aux bogues de Meta a déclenché des réactions urgentes dans tout l'écosystème JavaScript.
Désignée CVE-2025-55182, révélé le 3 décembre, désormais appelé React2Shell est une vulnérabilité de gravité maximale qui a un impact Composants du serveur React ainsi que les frameworks qui les intègrent. Initialement, un identifiant de vulnérabilité distinct pour Next.js (CVE-2025-66478) avait été attribué, mais le NVD l'a par la suite intégré à l'identifiant CVE principal de React en tant qu'entrée dupliquée.
Le problème sous-jacent est le même : la gestion non sécurisée des charges utiles RSC sérialisées pouvant être déclenchées par une requête HTTP. Cela permet à un acteur malveillant d’envoyer une requête HTTP manipulée qui exécute du code JavaScript arbitraire sur le serveur après avoir été… désérialisé par React.
CVE-2025-55182 Aperçu
Les composants serveur React sont profondément intégrés aux frameworks modernes et, dans de nombreux cas, activés par défaut. De ce fait, les applications peuvent être exposées à React2Shell (CVE-2025-55182) même s'ils ne définissent jamais explicitement de point de terminaison de fonction serveur, l'implémentation RSC est toujours présente, et cela suffit à activer des chemins de code vulnérables et à créer un risque important. risque RCE.
Le défaut provient de la manière dont Protocole React Flightl traite certaines charges utiles structurées. Les versions précédentes tentaient de parcourir les chemins d'accès aux objets fournis dans la charge utile sans vérifier la validité ni la conformité de la structure. Un attaquant pouvait manipuler ce processus et, finalement, exécuter du code sur le serveur. Aucune authentification, aucune configuration particulière ni aucune logique spécifique à l'application n'étaient requises. Étant donné que ce problème existe dans les configurations par défaut, standard Les déploiements sont exposés sans nécessiter de conditions particulières.
L'exploitation se produit lorsque des attaquants envoient des requêtes HTTP POST malveillantes qui abusent du «vm.runInThisContextCe mécanisme repose sur les actions serveur. Si React n'expose pas directement le point de terminaison vulnérable, Next.js le fait, créant ainsi un véritable vecteur d'attaque à distance.
Next.js accepte les données Flight de n'importe quelle requête, les traite sans validation adéquate et les transmet au désérialiseur de React. Le système considère ces entrées externes comme fiables, ce qui permet aux attaquants d'obtenir des résultats. exécution de code à distance par le biais de points d'accès accessibles au public avec tous les privilèges de processus Node.js sur le serveur cible.
La gravité augmente considérablement car les configurations par défaut restent vulnérables à React2Shell (CVE-2025-55182) et le résultat risque RCE. A standard L'application Next.js que vous créez avec create-next-app Elle s'expose sans nécessiter de code personnalisé ni de modifications de configuration. Les chercheurs en sécurité confirment une fiabilité d'exploitation proche de 100 % et signalent que 39 % des environnements cloud exécutent des instances vulnérables, tandis que 44 % de l'ensemble des environnements exécutent des applications Next.js exposées publiquement et affectées par cette vulnérabilité. React2Shell.
Comprendre l'exposition à React2Shell
Les versions vulnérables concernent plusieurs versions :
| Composant | Versions affectées |
|---|---|
| react-server-dom-webpack | 19.0, 19.1.0, 19.1.1, 19.2.0 |
| react-server-dom-parcel | 19.0, 19.1.0, 19.1.1, 19.2.0 |
| react-server-dom-turbopack | 19.0, 19.1.0, 19.1.1, 19.2.0 |
Étant donné que de nombreux frameworks intègrent la prise en charge de RSC au niveau du noyau, les applications héritent souvent du code vulnérable sans le savoir. Tout framework ou outil de regroupement de modules qui distribue ces packages peut exposer l'application à React2Shell (CVE-2025-55182) et au risque d'exécution de code à distance qui en découle. Cela inclut :
- Next.js (routeur d'application)
- Aperçu de React Router RSC
- Plugin Vite RSC
- Module complémentaire Parcel RSC
- SDK Redwood
- waku
- Exposition
Next.js est particulièrement touché car il utilise par défaut des points de terminaison liés à RSC via HTTP. Les versions commençant par Versions Canary 14.3.0, ainsi que la plupart 15.x et tôt 16.x Les versions contiennent l'implémentation vulnérable. Toute personne exécutant la version canary 14.3.0-canary.77 ou plus tard devrait revenir au stable 14.x branche jusqu'à la publication d'une version canary corrigée.
Versions corrigées de Next.js comprennent:
| Composant | Versions corrigées |
|---|---|
| Next.js | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
Points de preuve publics et détection fiable
Suite à la divulgation de la vulnérabilité, de nombreuses prétendues preuves de concept ont commencé à circuler. Beaucoup d'entre elles étaient soit inexactes, soit basées sur des hypothèses erronées. L'auteur initial de la vulnérabilité, Lachlan Davidson, l'a confirmé publiquement le react2shell que les preuves de concept GitHub qui circulent ne correspondent pas à l'exploit partagé en privé avec les mainteneurs de React/Next.js et fourni par lui propre preuve de concept.
Un problème majeur des premières tentatives publiques réside dans leur incapacité à reconnaître que l'exploitation réussit contre standard Déploiements Next.js sans nécessiter de logique applicative spécifique ni de fonctions côté serveur.
Des chercheurs en sécurité de plusieurs organisations ont souligné que la détection de cette vulnérabilité exige plus que la simple identification de la présence de RSC. L'équipe d'Assetnote a publié un rapport. méthode de détection fiable , l’aspect économique scanner capable de confirmer le problème sans utiliser de logique d'exploitation. Metasploit disposera bientôt d'une exploit disponible pour cette vulnérabilité également.
L'approche de détection exploite la façon dont React Server gère les références aux propriétés d'objets en utilisant des délimiteurs deux-points au sein du ReactFlightClientConfigBundlerWebpack.js/requireModule() Lorsque des versions vulnérables traitent une charge utile multipart spécialement structurée qui tente de parcourir des chemins d'objets imbriqués inexistants, elles déclenchent des réponses d'erreur prévisibles. Une requête de diagnostic envoie un modèle de référence comme `$1:a:a` Cette opération est associée à un objet vide. Les implémentations vulnérables tentent de résoudre cette situation comme un accès imbriqué à une propriété d'une valeur indéfinie, ce qui provoque une exception. Le serveur renvoie un code d'état 500 accompagné d'un modèle d'erreur spécifique dans le corps de la réponse.
export function requireModule<T>(metadata: ClientReference<T>): T {
let moduleExports = __webpack_require__(metadata[ID]);
if (isAsyncImport(metadata)) {
if (typeof moduleExports.then !== 'function') {
// This wasn't a promise after all.
} else if (moduleExports.status === 'fulfilled') {
// This Promise should've been instrumented by preloadModule.
moduleExports = moduleExports.value;
} else {
throw moduleExports.reason;
}
}
if (metadata[NAME] === '*') {
// This is a placeholder value that represents that the caller imported this
// as a CommonJS module as is.
return moduleExports;
}
if (metadata[NAME] === '') {
// This is a placeholder value that represents that the caller accessed the
// default property of this if it was an ESM interop module.
return moduleExports.__esModule ? moduleExports.default : moduleExports;
}
return moduleExports[metadata[NAME]];
}
Mesures immédiates à prendre pour les organisations confrontées à React2Shell (CVE-2025-55182) et au risque d'exécution de code à distance
Effectuez une analyse complète de votre code source et de vos applications déployées. pour localiser les versions vulnérables des packages. Portez une attention particulière aux dépendances directes des packages du serveur React, aux implémentations RSC au niveau du framework (Next.js, Waku, Redwood, etc.), aux applications construites avec `create-next-app` ou des outils de génération de code similaires et aux applications conteneurisées susceptibles de contenir des images de base obsolètes.
Analyse de la composition logicielle (SCA) des outils comme Xygéni SCA peut automatiquement détecter les dépendances affectées dans l'ensemble de votre parc logiciel.
Correctif immédiat :
Mettez à jour vos frameworks, notamment React (19.0.1, 19.1.2, 19.2.1), Next.js (15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7) et tous les packages incluant RSC, vers des versions corrigées. Ces mises à jour introduisent une validation stricte du traitement des données RSC et empêchent le déréférencement non sécurisé de propriétés, une faille de sécurité.
Les outils de remédiation automatisés, tels que La fonction de correction automatique de Xygeni, peut accélérer le processus sur de vastes bases de code.
Mise en œuvre de protections WAF temporaires :
Pendant que les correctifs se propagent dans votre déploiement pipelineActivez les règles du pare-feu d'applications web pour une protection immédiate. Les principaux fournisseurs de services cloud ont publié des ensembles de règles d'urgence. CloudflareProtection automatique pour tous les niveaux lorsque le trafic React est proxyfié, ainsi que AWS, Akamai, Fastly, Google Cloud Des règles de défense similaires sont disponibles. Activez immédiatement ces contrôles afin de créer une couche de protection pendant la période de transition.
Surveillez le trafic HTTP suspect :
Configurez la journalisation et les alertes pour les indicateurs de tentatives d'exploitation : charges utiles du protocole RSC Flight malformées ou inattendues, schémas inhabituels d'erreurs 500 sur les points de terminaison RSC, requêtes POST avec des en-têtes `Next-Action` ou `Next-Router-State-Tree` suspects, requêtes répétées vers les chemins `/_next/` avec des charges utiles multiparties.
Vérifiez la nomenclature de votre logiciel :
De nombreux frameworks intègrent les dépendances RSC de manière transparente, les rendant invisibles lors d'une analyse superficielle des dépendances. Examinez votre configuration complète. SBOM Afin de garantir qu'il ne subsiste aucune dépendance transitive sur des packages serveur React vulnérables et que les mises à jour du framework n'ont pas introduit par inadvertance d'anciennes implémentations RSC, il convient de s'assurer qu'elles ne comportent pas de dépendances transitives.
Réflexions de clôture
React2Shell figure parmi les vulnérabilités les plus critiques de l'écosystème JavaScript de ces dernières années, non pas en raison de la complexité de l'exploitation, mais parce que RSC est profondément intégré aux outils actuels. Des correctifs étant désormais disponibles pour l'ensemble de l'écosystème, les équipes doivent déployer les mises à jour en production au plus vite.
Si votre application utilise les fonctionnalités serveur de React, que ce soit directement ou indirectement, vous devez traiter cette vulnérabilité comme une priorité absolue.




