React et Next.js, deux piliers de l'ecosysteme JavaScript, ont ete touches par une vulnerabilite critique notee 10.0 au CVSS. Cette faille, connue sous le nom de React2Shell (CVE-2025-55182), a egalement ete referencee cote Next.js via la CVE-2025-66478 (doublon). Elle permet une execution de code a distance a partir d'une requete non authentifiee.
Contexte : React, RSC et Next.js
React est une bibliotheque JavaScript open source creee par Meta, largement utilisee pour construire des interfaces web. Avec les React Server Components (RSC), une partie du rendu peut etre executee directement sur le serveur.
Next.js est un framework base sur React qui facilite le rendu hybride (SSR, SSG, RSC). Son adoption massive explique l'ampleur de l'impact lorsqu'une faille touche la chaine RSC.
Qui est vulnerabile ?
La faille touche React 19.0.0 a 19.2.0 avec les packages suivants :
react-server-dom-parcelreact-server-dom-turbopackreact-server-dom-webpack
Cote Next.js, les versions affectees incluent :
- 15.x
- 16.x
- 14.3.0-canary.77 et suivantes
Frameworks/bundlers utilisant RSC vulnerables :
react-routerwakuparcel/rscvitejs/plugin-rscrwsdk
Analyse de la vulnerabilite (resume)
L'origine vient d'une deserialisation insuffisamment filtree. Une requete POST peut fournir une charge utile dont le champ id est splitte par #, puis resolu via requireModule. L'acces a moduleExports[metadata[2]] parcourt la prototype chain, ce qui permet d'atteindre des fonctions internes.
Exemple de payload simplifiee :
{ "id": "fs#constructor", "bound": [] }
Ce qui revient a appeler :
__webpack_require__('fs')['constructor']
Une fois le module resolu, le bound passe en argument peut declencher une execution de code (RCE) via vm, child_process, ou, en variante, via fs.
Exemple de requete exploitable
POST /formaction HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{payload}
------Boundary--
$ACTION_REF_0declenche le parsing metadata$ACTION_0:0contient le JSON avecidetbound
Impact
Une faille RCE non authentifiee dans un framework aussi repandu que React/Next.js a un impact majeur : acces serveur, exfiltration de donnees, ou compromission persistante.
Comment detecter une tentative d'exploitation
Inspectez les logs pour :
- champs
$ACTION_REF_et$ACTION_ID_ - presence de
#constructor,#__proto__ou#prototype - references aux modules
vm,child_process,process
Remediation
Mettre a jour immediatement :
- Next.js : 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 ou revenir a une version canary < 14.3
- React : 19.0.1, 19.1.2, 19.2.1
Mesures additionnelles :
- Ajouter des regles WAF pour bloquer :
#constructor,#__proto__,#prototype,vm#runInThisContext,vm#runInNewContext,child_process#execSync