Categories: ALERTAS

Rootkit PoisonedRefresh injeta web shell na memória do BIG-IP

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 contexto: CVE-2025-53521 e os appliances expostos

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.

O que muda em relação a um web shell tradicional

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:

  • Entrega sem arquivo. A capacidade de web shell continua existindo, mas não está ancorada em um script estático. O implante intercepta o carregamento de arquivos PHP específicos e antepõe o web shell à representação em memória no momento do mmap().
  • Comprometimento no nível do processo, não da aplicação. O implante redireciona chamadas selecionadas da libc e da libphp dentro dos processos worker do Apache. Todo componente PHP executado naquele processo — plugins, scanners, scripts locais — passa a rodar dentro de um ambiente de execução manipulado.
  • Dois canais de acesso. Além da carga PHP acionada por HTTP, existe um backdoor em socket UNIX local que entrega shell interativo sem abrir nenhuma porta TCP em escuta.

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.

A cadeia técnica, passo a passo

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 libphpmprotect 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.

Arquitetura em estágios e o que ainda não se sabe

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.

Sinais para caça e resposta

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:

  • Requisições aos endpoints .php3 citados, sobretudo se forem raras no ambiente.
  • Endpoints PHP devolvendo HTTP 201 enquanto declaram ser CSS (Content-Type: text/css; charset=utf-8).
  • Requisições POST repetidas, com estrutura consistente ou tamanhos de corpo incomuns, para caminhos PHP que se apresentam como CSS.

Na camada de host:

  • Processos worker do Apache lendo /proc/self/maps.
  • Mudanças temporárias de permissão de memória nos mapeamentos do módulo PHP (RWX seguido de RX) em torno da libphp.
  • Criação de socket de domínio UNIX em /run/bigtlog.pipe.
  • Processos com linhagem do Apache redirecionando stdio e executando /bin/bash.

Recomendações

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:

  • Se a execução de .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.
  • Restringir 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.
  • Alertar sobre combinações incomuns em workers do Apache: leitura de /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.
  • Em resposta a incidentes, capturar evidência volátil primeiro, assumir acesso duplo e não tratar o reinício do serviço como garantia de erradicação, dado o componente de persistência através de imagens de atualização.
  • Incorporar coleta de memória de processo e comparação entre conteúdo em disco e em memória aos playbooks de resposta para servidores web críticos.

Conclusão

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.

Fontes e referências

  • Sophos X-Ops — “Dissecting a PHP web server rootkit”, por Luke Mitchell (7 de setembro de 2026): sophos.com
  • BleepingComputer — “Hackers breach F5 BIG-IP APM devices to deploy Linux rootkit”, por Bill Toulas (8 de setembro de 2026): bleepingcomputer.com
  • F5 — Aviso de segurança K000156741: BIG-IP APM vulnerability CVE-2025-53521: my.f5.com
  • CISA — Known Exploited Vulnerabilities Catalog: cisa.gov
  • NCSC (Reino Unido) — “Vulnerability affecting F5 BIG-IP APM”: ncsc.gov.uk
  • ShadowServer Foundation — Estatísticas de dispositivos F5 BIG-IP APM expostos: dashboard.shadowserver.org
  • ESET Research — perfil onde a família foi nomeada PoisonedRefresh: infosec.exchange
TheNinja

Recent Posts

ClickFix no navegador usa Google Sheets como C2 para roubar cripto

A Cisco Talos rastreou por meses uma operação que convence a própria vítima a injetar…

2 horas ago

Estudo modela contágio bancário a partir de fornecedor de IA

Preprint no arXiv constrói uma rede de quatro camadas e simula como o comprometimento de…

4 dias ago

DeepSeek V4.1-Flash abre pesos e corta o cache KV em 4 vezes

Modelo multimodal de mistura de especialistas chega com licença MIT, contexto de 1 milhão de…

4 dias ago

WatchGuard Firebox: falha crítica agora é usada em ransomware

A CISA marcou a CVE-2025-14733 como explorada por grupos de ransomware. A falha crítica no…

4 dias ago

Phishing com tema de passkey leva a invasão de contas na nuvem

A Microsoft detalhou uma cadeia de intrusão ativa desde maio de 2026 em que o…

4 dias ago

IA mapeia o maior conectoma cerebral já publicado

Janelia, Cambridge, o MRC LMB e o Google Research publicaram na Cell o sistema nervoso…

1 semana ago