Failles critiques dans React et Next.js : vulnérabilités React2shell exposant à l'exécution de code à distance
Théophane Villedieu
Découverte de failles critiques dans React et Next.js exposant à l’exécution de code à distance
Une vulnérabilité de gravité maximale a été récemment identifiée dans les composants React Server Components (RSC), qui, si exploitée avec succès, pourrait conduire à l’exécution de code à distance. Cette faille de sécurité, identifiée sous le nom de CVE-2025-55182 et surnommée React2shell, présente un score CVSS de 10.0, le niveau le plus élevé possible, indiquant une criticité extrême. Selon les experts en sécurité, environ 39% des environnements cloud hébergent des applications vulnérables à cette faille, et plus de 968 000 serveurs exécutant des frameworks modernes comme React et Next.js sont exposés, créant une surface d’attaque immense pour les acteurs malveillants.
Comprendre la vulnérabilité React2shell : mécanismes et risques techniques
La vulnérabilité React2shell repose sur une faille de désérialisation logique qui prend sa source dans le traitement non sécurisé des payloads RSC. Selon l’analyse menée par la firme de sécurité cloud Wiz, l’exploitation de cette faille permet à un attaquant non authentifié de formuler une requête HTTP malveillante vers n’importe quel endpoint de fonction serveur, qui, lors de sa désérialisation par React, exécute du code JavaScript arbitraire sur le serveur.
La désérialisation logique désigne un type de vulnérabilité où un système de confiance interprète et exécute des données structurées fournies par une source externe, sans validation adéquate. Dans le cas de React, le problème réside dans la manière dont le framework décode les payloads envoyés aux endpoints de fonction serveur via le protocole React Flight.
Selon Aikido, une entreprise spécialisée dans la sécurité de la chaîne d’approvisionnement logicielle, “l’issue provient du manquement à la sécurisation du traitement des payloads sérialisés dans le protocole React Flight. Les payloads malformés ou adversariaux peuvent influencer l’exécution côté serveur de manière non prévue. Les versions React corrigées incluent une validation plus stricte et un comportement de désérialisation renforcé.”
En pratique, cette faille exploite la confiance que le système accorde aux structures de données entrantes, permettant à un attaquant de contourner les mécanismes de sécurité normaux. Justin Moore, responsable senior de la recherche sur les menaces de l’Unité 42 de Palo Alto Networks, décrit cette vulnérabilité comme “une clé maîtresse d’exploitation, réussissant non pas en faisant planter le système, mais en abusant de sa confiance dans les structures de données entrantes. Le système exécute le payload malveillant avec la même fiabilité que le code légitime car il fonctionne exactement comme prévu, mais sur une entrée malveillante.”
Impact sur les applications React et Next.js en production
La portée de cette vulnérabilité s’étend considérablement, affectant non seulement React lui-même mais aussi Next.js, l’un des frameworks React les plus populaires pour le développement web. Selon les experts de la sécurité, même les applications qui n’implémentent pas d’endpoints de fonction serveur React peuvent être vulnérables si elles prennent en charge les composants serveur React (RSC).
“Même si votre application n’implémente aucun endpoint de fonction serveur React, elle peut toujours être vulnérable si votre application prend en charge les composants serveur React,” a déclaré l’équipe React dans un alerte publiée aujourd’hui.
Environ 968 000 serveurs exécutant des frameworks modernes comme React et Next.js ont été identifiés comme exposés, selon les recherches menées par Palo Alto Networks Unit 42. Cette surface d’attaque massive représente une opportunité lucrative pour les attaquants, car aucune configuration spéciale n’est requise pour exploiter la faille. La vulnérabilité affecte les configurations par défaut des frameworks, ce qui signifie que les déploiements standards sont immédiatement exploitables sans conditions particulières.
Considérons un scénario réaliste : une entreprise française utilisant Next.js pour son site e-commerce avec des milliers de transactions quotidiennes. Sans mise à jour, un attaquant pourrait envoyer une requête HTTP spécialement conçue vers n’importe quel endpoint de fonction serveur. Cette requête, une fois traitée par Next.js, exécuterait du code arbitraire sur le serveur, permettant potentiellement de voler des données clients, de modifier des prix, ou même de prendre le contrôle complet de l’infrastructure.
Bibliothèques et frameworks affectés au-delà de React
L’impact de cette vulnérabilité s’étend bien au-delà des packages React core, touchant également diverses bibliothèques et frameworks qui intègrent les composants serveur React. La vulnérabilité affecte spécifiquement les versions 19.0, 19.1.0, 19.1.1, et 19.2.0 des packages npm suivants :
- react-server-dom-webpack
- react-server-dom-parcel
- react-server-dom-turbopack
Ces vulnérabilités ont été corrigées dans les versions 19.0.1, 19.1.2, et 19.2.1 respectivement. Pour Next.js, une vulnérabilité distincte mais liée a été identifiée sous l’identifiant CVE-2025-66478 (également avec un score CVSS de 10.0). Elle affecte les versions >=14.3.0-canary.77, >=15, et >=16 de Next.js. Les versions corrigées incluent 16.0.7, 15.5.7, 15.4.8, 15.3.6, 15.2.6, 15.1.9, et 15.0.5.
Toute bibliothèque qui bundle des RSC est susceptible d’être affectée par cette faille. Cela inclut, mais n’est pas limité à :
- Plugin Vite RSC
- Plugin Parcel RSC
- React Router RSC preview
- RedwoodJS
- Waku
Endor Labs, Miggo Security, et VulnCheck ont tous souligné qu’aucune configuration spéciale n’est requise pour exploiter la faille, ajoutant qu’elle est exploitable à la fois sans nécessiter de connexion et via HTTP.
Versions affectées et corrigées : tableau comparatif
Voici un résumé visuel des principales bibliothèques affectées et de leurs versions corrigées :
| Bibliothèque/Framework | Versions affectées | Versions corrigées | Identifiant CVE | Score CVSS |
|---|---|---|---|---|
| React (RSC) | 19.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 | CVE-2025-55182 | 10.0 |
| Next.js | >=14.3.0-canary.77, >=15, >=16 | 16.0.7, 15.5.7, 15.4.8, 15.3.6, 15.2.6, 15.1.9, 15.0.5 | CVE-2025-66478 | 10.0 |
Il est crucial pour les développeurs et administrateurs système de vérifier si leurs projets utilisent ces bibliothèques dans les versions affectées. Par exemple, une application utilisant React 19.1.0 avec Next.js 15.4 serait vulnérable aux deux CVE distincts nécessitant des mises à jour séparées.
Recommandations de sécurité urgentes pour les développeurs
Face à la criticité de ces vulnérabilités, plusieurs mesures immédiates doivent être prises pour atténuer les risques avant d’appliquer les correctifs. Voici les étapes recommandées par les experts en sécurité :
Déploiement de règles de pare-feu applicatif web (WAF) : Si disponible, déployez des règles WAF spécifiques pour bloquer les requêtes HTTP suspectes destinées aux endpoints de fonction serveur. Cloudflare a déjà déployé une nouvelle protection dans sa solution WAF cloud pour adresser CVE-2025-55182, notant que tous les clients sur les plans gratuits et payants sont protégés “tant que leur trafic d’application React est proxysé” via le service.
Surveillance du trafic HTTP : Mettez en place une surveillance attentive du trafic HTTP destiné aux endpoints de fonction serveur pour détecter toute requête suspecte ou malformée. Recherchez des schémas inhabituels dans les requêtes entrantes, des tentatives d’envoi de payloads anormalement volumineux, ou des requêtes provenant d’adresses IP inhabituelles.
Restriction temporaire de l’accès réseau : En tant que mesure temporaire, envisagez de restreindre l’accès réseau aux applications affectées, en limitant l’accès aux adresses IP approuvées si possible.
Planification de la migration vers les versions corrigées : Élaborez un plan pour mettre à jour vos applications vers les versions corrigées des bibliothèques affectées. Cela doit être une priorité absolue, car la faille est activement exploitée dans la nature.
Audit de la chaîne d’approvisionnement : Évaluez si d’autres bibliothèques dépendant de React ou Next.js pourraient être affectées indirectement par ces vulnérabilités.
Mise en œuvre sécurisée des composants serveur React
Au-delà des mesures immédiates, il est essentiel d’adopter des pratiques de codage plus robustes lors de l’utilisation des composants serveur React pour prévenir de futures vulnérabilités similaires :
- Validation stricte des entrées : Implémentez une validation rigoureuse de toutes les données entrantes avant leur traitement par les fonctions serveur React.
- Moins de confiance dans les données externes : Traitez toutes les données provenant de sources externes avec suspicion et ne supposez jamais leur intégrité.
- Utilisation de bibliothèques de désérialisation sécurisées : Lorsque vous travaillez avec des données sérialisées, privilégiez les bibliothèques qui offrent un mécanisme de désérialisation sécurisé.
- Tests de pénétration réguliers : Intégrez des tests de pénétration dans votre cycle de développement pour identifier les vulnérabilités avant leur déploiement en production.
Conclusion : Prioriser la sécurité dans l’écosystème React
La découverte de la vulnérabilité React2shell met en lumière les défis permanents de la sécurité dans les écosystèmes de développement web modernes. Avec plus de 968 000 serveurs exposés et 39% des environnements cloud hébergeant des applications vulnérables, l’urgence d’agir est évidente. Les failles critiques dans React et Next.js représentent une menace existentielle pour les applications web, permettant une exécution de code à distance sans authentification.
La réponse appropriée à cette crise combinée de sécurité implique une action immédiate mais aussi une réévaluation des pratiques de développement à long terme. Les développeurs et administrateurs système doivent appliquer les mises à jour vers les versions corrigées de React (19.0.1, 19.1.2, ou 19.2.1) et Next.js (selon la version utilisée) dès que possible. En attendant, des mesures temporaires comme le déploiement de règles WAF et la surveillance du trafic HTTP peuvent fournir une couche de protection critique.
L’incident React2shell devrait servir de rappel que la sécurité doit être intégrée à chaque étape du développement, pas seulement ajoutée comme une réflexion tardive. Alors que l’écosystème React continue d’évoluer, notamment avec l’adoption croissante des composants serveur, les pratiques de sécurité doivent évoluer en parallèle pour protéger les applications contre les menaces émergentes.