Imagem editorial original do Plugged Ninja.
A Sophos X-Ops publicou em 7 de setembro de 2026 a análise técnica de um implante Linux recuperado de ambientes F5 BIG-IP APM comprometidos. Assinado pelo pesquisador Luke Mitchell, o texto descreve um malware que entrega ao atacante uma capacidade familiar — execução remota de código no servidor, o que qualquer defensor chamaria de web shell — mas por um caminho que praticamente anula as ferramentas de inspeção de arquivos.
O ponto central é este: o web shell não precisa existir em disco. O implante intercepta o momento em que o PHP mapeia determinados arquivos para a memória e antepõe o código malicioso a essa representação em memória. O arquivo continua íntegro no sistema de arquivos; o processo do Apache executa outra coisa.
Durante a pesquisa, a Sophos soube que a ESET havia analisado a mesma família de forma independente e a batizou de PoisonedRefresh. A Sophos detecta a amostra como Linux/Agnt-IC. O hash SHA-256 divulgado é 26bd5b0722d1dbab5db749a063c49bc8638653ac2addfead7a9cb3d6d57bccc9.
O implante não é o vetor de entrada. Segundo a Sophos, ele aparenta ser uma carga de segundo estágio, e a F5 associa a atividade relacionada a sistemas BIG-IP APM afetados pela CVE-2025-53521.
O histórico dessa vulnerabilidade explica por que ainda há ambientes expostos. Ela foi divulgada pela F5 em outubro de 2025 no ciclo trimestral de avisos e classificada inicialmente como falha de negação de serviço, com CVSS v4 de 8,7. Em março de 2026, a F5 revisou o aviso e a reclassificou como execução remota de código sem autenticação, elevando as notas para 9,8 no CVSS v3.1 e 9,3 no CVSS v4. A CISA incluiu a falha no catálogo de vulnerabilidades exploradas conhecidas (KEV) em 27 de março de 2026.
A condição de exposição é específica: o BIG-IP precisa ter uma política de acesso do módulo APM configurada em um servidor virtual. Segundo os avisos públicos, os ramos afetados são 17.5.0 a 17.5.1, 17.1.0 a 17.1.2, 16.1.0 a 16.1.6 e 15.1.0 a 15.1.10. O aviso da F5 é o K000156741.
O tamanho da superfície ainda exposta é o dado mais desconfortável. A ShadowServer Foundation, que mantém um rastreador para sistemas BIG-IP APM vulneráveis à CVE-2025-53521, reportou 795 endpoints expostos na internet em 7 de setembro de 2026 — mais de cinco meses depois da entrada no catálogo da CISA.
Quando um defensor ouve “web shell”, pensa em um script pequeno em PHP, JSP ou ASP, colocado em um diretório acessível pela web — mas presente em disco e, portanto, encontrável. Foi essa premissa que moldou anos de lógica de detecção: varrer diretórios de web root, procurar nomes de parâmetro característicos em requisições HTTP, monitorar integridade de arquivos. A Sophos aponta três formas pelas quais esta amostra quebra esse modelo:
mmap().A consequência prática é severa: em um host comprometido, qualquer coisa que execute através da libphp adulterada pode enxergar uma versão diferente dos arquivos PHP daquela que realmente está em disco. Ferramentas de inspeção de arquivos passam a operar sobre uma verdade que não é a verdade do processo.
O binário analisado é stripped e estaticamente ligado, o que reduz o valor da triagem convencional por análise de imports ou busca simples de strings, e contorna o caminho normal do carregador dinâmico trazendo a própria lógica de carregamento.
Strings cifradas com RC4. Boa parte das strings operacionais fica cifrada na seção .rodata e só é decifrada em tempo de execução, com uma rotina RC4 compacta e chave fixa de 16 bytes. Decifradas, revelam o escopo: /proc/self/exe, /proc/self/maps, __libc_start_main, apr_dso_load, apr_time_now, libphp, além de APIs de arquivo e memória (open, close, mmap) e primitivas de threading. Isoladamente nenhuma é notável; juntas, desenham um malware que conhece internamente o processo Linux, o runtime do Apache e o modelo de execução do PHP.
Execução antes da main. Em Linux, a maioria dos programas não chama main diretamente: o fluxo passa pela inicialização da libc, e a __libc_start_main prepara o ambiente e invoca o ponto de entrada. Esta amostra desvia disso duas vezes. No ponto de entrada bruto ela salta para uma rotina de carregamento própria, que reabre a própria imagem via /proc/self/exe, localiza o offset do executável original preservado e carrega esse ELF embutido manualmente na memória. Depois substitui a __libc_start_main por um wrapper. O fluxo passa de _start → __libc_start_main(main) → main() para _start → carregador próprio → __libc_start_main real(wrapper) → wrapper() → main() real, com a inicialização do implante dentro do wrapper.
Ativação seletiva pelo APR. Em vez de agir imediatamente, o implante espera o Apache carregar o módulo PHP. Ele engancha apr_dso_load, função do Apache Portable Runtime que carrega objetos compartilhados em tempo de execução, e inspeciona os caminhos dos módulos; só ao detectar a libphp altera comportamento. Paralelamente engancha apr_time_now — função de “hora atual”, inócua em aparência mas chamada com muita frequência em um Apache vivo — e a usa como gatilho atrasado.
Localização da libphp e patching. O implante lê /proc/self/maps para descobrir os endereços do mapeamento da libphp, muda temporariamente as proteções daquela região para RWX, aplica patches em relocações e alvos de chamada e restaura para RX. Resumidamente: ler /proc/self/maps → localizar libphp → mprotect RWX → aplicar patches → mprotect RX.
Injeção via mmap. Dentro do contexto do módulo PHP, o implante redireciona chamadas a open, close, mmap e __fxstat. Ele intercepta a abertura de três scripts específicos — apm_css.php3, full_wt.php3 e webtop_popup_css.php3 — registra o descritor e, quando o arquivo é mapeado em memória, cria uma visão modificada contendo o web shell embutido seguido do conteúdo original. A escolha dos nomes não é aleatória: são arquivos presentes em ambientes webtop do BIG-IP APM, portanto pouco propensos a levantar suspeita.
O payload PHP resultante se comporta como um web shell clássico: lê os bytes brutos da requisição via php://input, verifica um prefixo mágico curto no início do corpo, decifra o restante com uma cifra de fluxo simples, executa o conteúdo via eval e devolve HTTP 201 com Content-Type: text/css; charset=utf-8, para se confundir com requisições normais de asset. O marcador de requisição e a chave são gravados no PHP em tempo de execução, o que complica a correspondência estática de assinaturas.
Backdoor em socket UNIX. Acionado pelo gatilho da apr_time_now, um thread separado cria um socket AF_UNIX local em /run/bigtlog.pipe. Após checagem de autenticação por token, o implante redireciona entrada, saída e erro padrão para o socket e executa /bin/bash, entregando shell interativo sem qualquer porta TCP em escuta, com fork() para atender múltiplas conexões.
A Sophos registra aqui uma limitação honesta da própria análise: não foi localizado nenhum mecanismo embutido que permita ao atacante se conectar a esse socket — não há código de cliente nem outras referências ao token. A hipótese de acesso através do web shell é plausível, mas a empresa afirma não ter evidência para confirmá-la nem refutá-la. Como o socket não está exposto à internet, o atacante precisaria de outro ponto de apoio no dispositivo.
Durante a análise de uma amostra relacionada, um binário umount, a Sophos identificou um componente distinto de instalação e propagação. Esse primeiro estágio seria responsável por infectar /usr/sbin/httpd, persistir através de imagens de atualização do BIG-IP, modificar configurações do SELinux e implantar a carga analisada no artigo. Um detalhe reforça a ligação: o tamanho do prefixo malicioso usado pelo httpd infectado (0x5430) coincide com o tamanho do payload embutido na amostra umount.
A Sophos não atribui o malware a um ator específico. O que a empresa afirma é que a segmentação e a implementação sugerem maturidade operacional, e que o alvo observado se concentra em ambientes webtop do BIG-IP APM — não em instalações genéricas de Apache/PHP nem em CMS comuns. Essa distinção importa para não gerar alarme desnecessário em quem opera servidores web convencionais.
A Sophos é explícita ao dizer que os sinais abaixo devem ser tratados como pistas de investigação, correlacionadas com evidências de integridade de arquivos, processo, memória e do próprio BIG-IP — não como confirmação isolada.
Na camada web:
.php3 citados, sobretudo se forem raras no ambiente.Content-Type: text/css; charset=utf-8).Na camada de host:
/proc/self/maps.libphp./run/bigtlog.pipe./bin/bash.A primeira medida é a mais importante e vem antes de qualquer endurecimento genérico: se você usa ou usou versões afetadas do BIG-IP APM, siga a orientação de remediação e avaliação de comprometimento da própria F5, referente à CVE-2025-53521, antes de aplicar recomendações gerais de Apache ou PHP. A Sophos alerta especificamente contra aplicar mitigações amplas em appliances BIG-IP sem seguir a orientação do fabricante — o risco de quebrar o produto é real.
Feito isso, valem as medidas de redução de superfície e visibilidade:
.php3 não for necessária, considerar desabilitá-la após controle de mudança e análise de impacto — em Apache, com uma diretiva FilesMatch restrita à extensão, negando acesso.ptrace (kernel.yama.ptrace_scope = 1) reduz oportunidades de inspeção e injeção entre processos. Não mitiga o comportamento de carregador e patching dentro do próprio processo, mas eleva o custo do atacante./proc/self/maps, mudança de proteção de memória sobre a libphp, criação de sockets UNIX sob /run e execução de /bin/bash.O PoisonedRefresh não inventa técnicas. Carregador ELF próprio, hook de __libc_start_main, patch de relocações, interceptação de mmap — cada peça é razoavelmente conhecida isoladamente. A sofisticação está na combinação e no alvo: um conjunto coerente de mecanismos que o mantém estável dentro de um processo Apache específico, em um appliance de borda que muitas organizações tratam como caixa-preta.
O achado mais relevante para o defensor é conceitual. Se o conteúdo que o Apache executa pode diferir do conteúdo que existe em disco, então a resposta a incidentes apoiada exclusivamente no sistema de arquivos pode passar ao lado da evidência principal. Isso empurra a prática na direção de correlação entre camadas — telemetria de rede, inspeção de protocolo, monitoramento de processo, análise de memória e verificação de integridade, cada uma revelando um pedaço diferente da cadeia.
O que observar a seguir: se a ESET publicar sua análise completa, se surgir atribuição a algum ator conhecido e, sobretudo, se o número de appliances BIG-IP APM expostos e sem correção começa a cair. Com 795 endpoints ainda visíveis em setembro de 2026, o estoque de alvos para o primeiro estágio segue confortável.
A Cisco Talos rastreou por meses uma operação que convence a própria vítima a injetar…
Preprint no arXiv constrói uma rede de quatro camadas e simula como o comprometimento de…
Modelo multimodal de mistura de especialistas chega com licença MIT, contexto de 1 milhão de…
A CISA marcou a CVE-2025-14733 como explorada por grupos de ransomware. A falha crítica no…
A Microsoft detalhou uma cadeia de intrusão ativa desde maio de 2026 em que o…
Janelia, Cambridge, o MRC LMB e o Google Research publicaram na Cell o sistema nervoso…