No Vuln — empresa brasileira de pentest e auditoria de segurança ofensiva
Voltar ao blog
Vulnerabilidade7 min de leitura

php2shell: a falha crítica do PHP que invade servidores sem senha (2026)

php2shell (CVE-2026-109618 e CVE-2026-109619): falha crítica no PHP permite execução remota de código sem senha. Quem é afetado e como corrigir já.

Diego Melo — autor
Diego Melo

Pesquisador de segurança e fundador da No Vuln

php2shell: a falha crítica do PHP que invade servidores sem senha (2026)

Se você tem um site ou sistema em PHP, atualize o PHP hoje. Em 21 de outubro de 2026, o projeto PHP revelou duas vulnerabilidades críticas — apelidadas de php2shell (CVE-2026-109618 e CVE-2026-109619) — que permitem a um atacante executar código no servidor sem precisar de senha, com uma única requisição. A correção é direta: atualizar para uma versão corrigida do PHP. Este post explica o que é a falha, quem é afetado, como ela é explorada e o passo a passo para se proteger.

O que é a php2shell

São duas falhas no núcleo do PHP, ligadas ao gerenciamento de memória durante o processamento de requisições HTTP. O time do PHP classificou a gravidade em 9,2 de 10 na escala CVSS 4.0; o NVD (a base nacional de vulnerabilidades dos EUA) registra 9,8 de 10 na CVSS 3.1 — em qualquer das duas escalas, é o topo da gravidade. O impacto principal é execução remota de código (RCE) sem autenticação: o atacante roda comandos no servidor sem ter conta nem senha. Como consequência, dá para derrubar o serviço, vazar dados e assumir o controle da máquina.

A Cloudflare estima que o PHP está presente em cerca de 70% dos sites — ele é a base do WordPress, de lojas virtuais, de portais e de incontáveis APIs. Por isso a falha é tão séria: não é um nicho, é a maior parte da web. No próprio dia da divulgação, serviços públicos saíram do ar para atualizar às pressas — no Brasil, parte dos serviços da Anatel ficou temporariamente inacessível.

Quem é afetado

Qualquer instalação de PHP que atende requisições web. A falha está no PHP em si, não em um framework específico, então atinge os principais modos de execução:

  • PHP-FPM (o mais comum hoje, atrás de Nginx);
  • Apache com mod_php — apontado como o cenário de maior risco;
  • php-cgi, FrankenPHP e LiteSpeed.

Na prática, isso inclui WordPress (e todo o seu ecossistema de temas e plugins), aplicações Laravel, lojas em Magento/WooCommerce, painéis internos e APIs feitas em PHP. Segundo o projeto, versões a partir do PHP 5.4 são reportadas como afetadas — ou seja, inclui muita coisa antiga ainda rodando em produção.

Como saber em 1 minuto se você está exposto

É simples: se o seu site ou sistema roda PHP e a versão não é uma das corrigidas (8.5.12, 8.4.27, 8.3.36 ou 8.2.35, ou um pacote da sua distribuição já atualizado), considere-se exposto. Para checar a versão: no servidor, php -v; num site, a versão às vezes aparece no cabeçalho HTTP X-Powered-By (se não estiver ocultado) ou no painel da hospedagem. Na dúvida, pergunte ao seu provedor “qual versão do PHP meu site usa e ela já tem a correção da php2shell?”.

Como a falha é explorada

O detalhe que torna a php2shell tão perigosa: uma única requisição HTTP dispara o ataque antes de o código da sua aplicação rodar. Não importa o framework, o plugin de segurança ou a regra de negócio — o problema acontece na camada do PHP que monta a requisição, antes de chegar ao seu código. As duas CVEs têm causas relacionadas, ambas em gerenciamento de memória:

CVE-2026-109618 — corrupção de memória na limpeza da requisição

Quando o servidor fica sem memória (out-of-memory) no meio do processamento, o PHP pode ser interrompido com dados internos da requisição parcialmente inicializados. A rotina de limpeza então trata esses dados inválidos como se fossem válidos — e essa corrupção de memória é o que o atacante usa para executar código.

CVE-2026-109619 — estado global reaproveitado de uma requisição anterior

Um estado interno que pertence a uma requisição pode sobreviver depois que a memória dele foi liberada. Uma requisição seguinte, atendida pelo mesmo processo worker, pode acabar usando esse estado “velho” antes de a inicialização normal zerá-lo. É um clássico de uso-após-liberação (use-after-free) entre requisições, que leva a execução de código e a vazamento de dado de uma requisição para outra.

Pesquisadores já demonstraram um exploit funcional, e a Cloudflare afirma ter identificado vetores de ataque conhecidos — motivo pelo qual o patch é urgente. (Não vamos publicar detalhes de exploração aqui.)

Como chegamos até aqui

As falhas foram encontradas de forma independente meses atrás — segundo as reportagens, pela empresa de segurança Calif e pela OpenAI — e pesquisadores da Wiz publicaram a explicação técnica. O plano era uma divulgação coordenada: distribuições Linux e provedores receberam o patch antes, para liberar os pacotes no mesmo dia. Mas informações sobre a falha vazaram antes da divulgação oficial, e aí a corrida começou: sites saíram do ar às pressas para atualizar, a Cloudflare ativou regras de WAF cerca de nove horas antes do anúncio, e o PHP publicou as versões corrigidas em 21 de outubro de 2026. É um lembrete de que, quando a falha é no núcleo de uma tecnologia onipresente como o PHP, o tempo entre “existe correção” e “estou protegido” é só o tempo que você leva para atualizar.

Por que não dá para só “contornar”

O comunicado do time do PHP é direto: não há solução de contorno definitiva; atualizar é a única opção segura. Mudar configuração ou limitar memória pode reduzir a exposição, mas não fecha a falha. Um WAF (firewall de aplicação) ajuda como camada temporária — a Cloudflare ativou regras para os vetores conhecidos, inclusive no plano gratuito, cerca de nove horas antes da divulgação — mas serve para ganhar tempo, não para substituir o patch. O NCSC do Reino Unido chegou a recomendar tirar do ar qualquer sistema que não possa ser corrigido imediatamente.

Como corrigir agora

  1. Veja sua versão do PHP. No servidor: php -v. Em hospedagem gerenciada, o painel (cPanel, Plesk) mostra a versão em uso.
  2. Atualize para uma versão corrigida (lançadas em 21/10/2026):
    PHP 8.5.x  →  8.5.12
    PHP 8.4.x  →  8.4.27
    PHP 8.3.x  →  8.3.36
    PHP 8.2.x  →  8.2.35
  3. Reinicie o PHP depois de atualizar. PHP-FPM (systemctl restart php8.3-fpm, ajustando a versão) ou o Apache com mod_php. Sem reiniciar, o processo antigo (vulnerável) continua rodando.
  4. Hospedagem gerenciada ou distribuição Linux? Ubuntu, Debian, AlmaLinux e Red Hat liberaram pacotes corrigidos (muitos antes da divulgação pública). Atualize pelo gerenciador de pacotes do sistema e confira com o seu provedor.
  5. Está numa versão antiga (fim de vida)? O PHP 8.1 e anteriores não recebem release oficial, mas o time de segurança publicou backports mínimos de código-fonte para PHP 7.4, 8.0 e 8.1 (para quem compila do código). PHP 5.x e 7.0–7.3 não têm correção do projeto — o caminho é migrar para uma versão suportada, com urgência.
  6. WAF como camada temporária. Se você usa Cloudflare, confirme que a proteção está ativa. É um paliativo enquanto você atualiza, não a solução.
  7. Verifique sinais de comprometimento. Como já há exploit, trate servidores desatualizados como potencialmente atingidos: olhe logs de acesso por requisições estranhas, arquivos novos ou modificados na raiz da aplicação (webshells), tarefas agendadas e usuários criados sem explicação.

Atualizei. E se já tiverem entrado antes?

Atualizar fecha a porta, mas não desfaz o que possa ter sido feito enquanto ela estava aberta. Como a falha permite execução de código sem login e já existe exploit público, um servidor que passou dias desatualizado merece uma verificação além do básico: procurar webshell, persistência (cron, serviços, chaves SSH adicionadas), credenciais que possam ter vazado e precisam ser trocadas, e acessos anômalos nos logs. Se o seu sistema guarda dado pessoal ou processa pagamento, essa checagem deixa de ser opcional.

É exatamente o tipo de situação em que um olhar externo ajuda: confirmar que a correção foi aplicada em todos os pontos e que ninguém deixou algo para trás. Se quiser que a gente ajude a verificar o seu caso, fale com um pesquisador — e, de forma mais ampla, um pentest periódico encontra esse tipo de brecha antes que vire manchete.

Fontes oficiais e análises: php.net (versões corrigidas), NVD CVE-2026-109618, NVD CVE-2026-109619, NCSC-NL (informação operacional) e Help Net Security. Este artigo é informativo e não substitui o aviso oficial do seu provedor e da sua distribuição.

Compartilhar

WhatsAppLinkedInX

Próximo passo

Quer aplicar isso ao seu sistema?

A No Vuln faz pentest profundo com a mesma metodologia descrita neste artigo. Solicite uma proposta — NDA bilateral em 24h, escopo definido em call técnica.