
Verificador de prova de conceito para CVE-2025-10951, uma travessia de caminho não autenticada no ml-logger, validando leitura arbitrária de arquivos por meio dos endpoints /glob e /stream.
Verificador de prova de existência para CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 — uma
vulnerabilidade de path traversal não autenticada em geyang/ml-logger
(≤ 0.10.36), que afeta as funções log_handler / stream_handler em
ml_logger/server.py.
Para uso apenas contra sistemas que você está autorizado a testar.
| Endpoint | Method | Purpose |
|---|
/glob | POST | Confirma que o servidor enumera caminhos do sistema de arquivos fora do escopo pretendido do aplicativo |
/stream | GET | Confirma a leitura arbitrária de arquivos por meio de um truque de traversal com barra dupla no início (//path/to/file) |
Por padrão, a etapa de prova apenas lê /etc/hostname — uma única linha inofensiva,
presente em praticamente todos os hosts Linux, nunca dados sensíveis.
pip install requests
Verificação básica:
python3 check_mllogger_traversal.py http://TARGET:PORT
Gravar resultados em JSON (para documentação/evidências do engajamento):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
Buscar um arquivo específico de sua escolha (só executa se a vulnerabilidade for confirmada):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
Tudo junto:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
| Flag | Description |
|---|---|
target | URL base, ex.: http://192.xxx.x.xx:8081 |
--timeout | Tempo limite de requisição em segundos (padrão: 8.0) |
--json FILE | Grava resultados estruturados em um arquivo JSON |
--fetch REMOTE_PATH | Busca um arquivo remoto específico que você informar |
--output LOCAL_PATH | Nome local do arquivo para a saída de --fetch (padrão: nome base do caminho remoto) |
0 — vulnerabilidade confirmada (totalmente ou provavelmente)1 — não confirmada como vulnerável / destino inacessível{
"target": "http://192.xxx.xxx.xxx:8081",
"timestamp": "2026-00-12T10:15:32.123456+00:00",
"cve": "CVE-2025-10951",
"glob_endpoint_confirmed": true,
"stream_endpoint_confirmed": true,
"vulnerable": true,
"likely_vulnerable": true,
"fetch": {
"remote_path": "/etc/passwd",
"local_path": "passwd.txt",
"success": true
}
}
--fetch só será executado após a verificação de vulnerabilidade ter sucesso — ele não
tentará uma busca contra um destino não confirmado.