exploitation php2shell honeypot telemetry

Na Natureza: Cadeias Weaponizadas, Telemetria de Honeypot e Análise de Ataques Reais

php2shell.run Research Lab •

Na Natureza: Cadeias Weaponizadas, Telemetria de Honeypot e Análise de Ataques Reais

Verificado em 23 de outubro de 2026.

Dentro de 48 horas após a publicação de CVE-2026-109618 e CVE-2026-109619, foram observados scans automatizados e primeiras tentativas de weaponização. Este artigo resume telemetria de honeypots em Frankfurt e Silicon Valley e analisa quais atalhos os atacantes tomaram. IPs e domínios são mascarados. Os dados servem à defesa e ao aprimoramento de regras de detecção.

1. Sequência real de ataque

T+0s: reconhecimento — scans não aleatórios em /index.php, /login, /.env, /wp-login.php. O alvo é o parser multipart, que roda antes do roteamento.

T+3s: grooming — 12 a 30 pequenos POSTs multipart alinham bins do ZMM e enviam PHP_SESSION_UPLOAD_PROGRESS.

T+8s: gatilho — reset de sessão forçado, sobrescrita de fake zval; 1-2 SIGSEGV em workers, externamente parecendo 502/504.

T+12s: execução — sh -c "curl ... | sh" sob www-data, seguido de conexão C2 de saída.

T+20s: estabelecimento — webshell ou reverse shell, tentativa de escalonamento.

A maioria das requisições observadas ficou abaixo de 500 bytes. Notável: User-Agent frequentemente copiado de navegadores reais, enquanto fingerprints TLS e ordem de headers revelavam automação. Para detecção, a combinação de body pequeno, multipart repetido e crash de worker é muito mais significativa que o User-Agent.

2. Três atalhos dos atacantes

2.1 Bursts curtos contra jitter de concorrência

Para que duas requisições caiam no mesmo worker, o timing deve coincidir. Atacantes enviam 12 a 30 requisições em poucos segundos, aumentando muito a probabilidade de reutilização de worker.

2.2 Tabelas de offset pré-calculadas

Muitas tentativas visaram Ubuntu 22.04/24.04, Debian 12 e imagens oficiais php:8.2/8.3-fpm. Seus builds de libc e PHP são públicos; atacantes calculam offsets previamente e pulam a fase de leak de informação.

2.3 Compressão sem espaços

Comandos de shell são formatados com $IFS ou ${IFS} em vez de espaços, para contornar assinaturas simples de string.

3. Armadilhas típicas na análise de incidentes

Armadilha 1: logs normais do Nginx não mostram nada suspeito

As requisições parecem POSTs comuns; códigos de status são 200, 404 ou 413. O body não é logado por padrão e o comprometimento ocorre antes do código do usuário. Por isso são necessários body mirroring em caminhos selecionados, slow logs do FPM e eventos de reinício de worker.

Body mirroring pode capturar dados pessoais e credenciais. Verifique privacidade, retenção e controles de acesso antes de ativá-lo.

Armadilha 2: confiar apenas em firewall de egress

Atacantes usam tunneling DNS, C2 via HTTPS e armazenamento em nuvem legítimo. Filtros de egress são necessários, mas não suficientes. A execução de processos em si deve ser observada — por exemplo com Falco ou Tetragon.

Armadilha 3: tratar reinícios de worker como falha normal

O FPM reinicia workers crashados automaticamente. Sem monitoramento, passa despercebido. Configure emergency_restart_threshold, ative core dumps de forma controlada e inclua a taxa de reinício no alerting.

4. FAQ do operador

P1: Cloudflare ou CDN de borda podem parar esses ataques? Parcialmente. Edge WAFs ajudam com assinaturas conhecidas e rate limits, mas são estruturalmente desvantajados contra payloads multipart de 450 bytes e variantes de codificação. Compram tempo; a solução duradoura é o patch PHP.

P2: Como verificar rapidamente se um servidor foi comprometido? Verifique versão PHP e pacotes, arquivos recentemente criados em /var/www, /tmp, /dev/shm com bit de execução, processos sob www-data/nginx e conexões de saída.

P3: Como aplicar telemetria de honeypot ao meu ambiente? Adote a estrutura das requisições — caminho, tamanho do body, nome do campo, intervalo de burst — e traduza em regras Suricata e Falco. Comece em modo alert, meça falsos positivos e só então mude para bloqueio.

P4: O que fazer primeiro após comprometimento bem-sucedido? Isolar worker/container, preservar snapshot de memória, rotacionar session store e credenciais, definir session.upload_progress.enabled=Off e atualizar para versão corrigida. Depois analisar logs de egress e consultas DNS para escopo.

5. Métricas de telemetria e economia do ataque

Para avaliar a ameaça, não apenas requisições individuais importam, mas distribuições. Nos honeypots, o tamanho mediano do body foi 412 bytes, o percentil 95 foi 690 bytes. O número de requisições por origem por minuto atingiu picos de 38 na primeira onda de scan e depois caiu para 4-7. Caminhos de destino: 61% genéricos (/index.php, /), 22% interfaces de login/admin e 17% caminhos aleatórios frequentemente inexistentes.

Essa distribuição é útil para calibrar regras. Um limiar baseado no percentil 95 do tráfego normal gera menos falsos positivos que um valor fixo. Ao mesmo tempo, a ampla dispersão de caminhos mostra que whitelist de URLs individuais não basta. Mais sensato é combinar Content-Type, nome do campo e tamanho do body, complementado por correlação com eventos de worker.

A economia do ataque explica a velocidade da onda. Um scanner automatizado precisa apenas de uma lista de hosts acessíveis e um conjunto de offsets conhecido. O custo por alvo é da ordem de centavos; o ganho potencial — acesso a bancos de dados, dados de cartão, recursos de computação — é ordens de magnitude maior. Por isso espera-se que a onda não cesse, mas se expanda para outras regiões e provedores de hosting. Quem não inventariou seus runtimes PHP será surpreendido pela segunda onda.

Para relatórios, recomenda-se um semáforo simples: sistemas com versão corrigida e callback desativado são verdes; sistemas com patch mas sem desativação são amarelos; sistemas sem patch e sem mitigação são vermelhos. Essa classificação não é tecnicamente perfeita, mas torna a priorização visível para a gestão e evita que servidores individuais sejam esquecidos.

6. Avaliação da ameaça

As cadeias observadas são menos "zero-days sofisticados" e mais automação de padrões conhecidos de corrupção de memória. O custo para o atacante é baixo e o ganho potencial alto — por isso scans começam frequentemente dentro de horas após a publicação. Operadores devem priorizar não pela complexidade do exploit, mas pela exposição: todo worker PHP não corrigido com callback de upload progress ativo é um alvo potencial.

Há também um efeito estrutural: como a vulnerabilidade está no core, não ajuda endurecer apenas a própria aplicação. Frameworks, CMS e APIs customizadas compartilham a mesma engine. Uma janela de patch de várias semanas não é risco puramente interno, mas risco para todos os tenants e clientes rodando na mesma runtime. Quem oferece hosting deve poder comprovar o nível de patch por vHost.

Para gerenciamento de patches, isso significa tratar runtimes PHP como classe de ativo própria. Para monitoramento, correlacionar sinais de rede, runtime e kernel. Para resposta a incidentes, preservar core dumps, logs e dados de sessão cedo, antes que reinícios automatizados apaguem os rastros.

7. Conclusão

  1. O comprometimento ocorre antes do código da aplicação; logs de acesso clássicos não bastam.
  2. Atacantes usam bursts, offsets pré-calculados e compressão de shell.
  3. Reinícios de worker são um sinal subestimado.
  4. Patch para 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 e desativação do callback permanecem as medidas mais eficazes.

Dados de honeypot são usados exclusivamente para pesquisa defensiva. Infraestrutura de atacantes não é divulgada.

8. Recomendações de hardening pós-incidente

Após um incidente confirmado, não basta remover a ameaça visível. É necessário assumir comprometimento persistente e agir em camadas. Primeiro, isole os sistemas afetados e preserve evidências (memória, logs, artefatos). Segundo, rotacione todas as credenciais acessíveis pelos workers comprometidos, incluindo chaves de API, tokens de banco de dados e segredos de aplicação. Terceiro, reconstrua os workers a partir de imagens conhecidas como boas, em vez de tentar limpar. Quarto, revise configurações de rede e permissões para garantir que um único worker comprometido não possa acessar recursos sensíveis. Quinto, implemente monitoramento reforçado por pelo menos 30 dias para detectar reinfecção. Sexto, conduza uma revisão pós-incidente (post-mortem) documentando causa raiz, tempo de detecção, tempo de resposta e lições aprendidas. Use esse documento para atualizar runbooks e treinar a equipe. A combinação de resposta técnica e melhoria de processo é o que reduz o risco de recorrência.