Insights · Segurança

PHP2Shell: o que fazer se o seu sistema ainda roda PHP 7 ou 8.1, e como sair do PHP legado

Publicado em

Em 21 de outubro de 2026, o projeto PHP corrigiu duas falhas críticas que podem permitir executar código no servidor sem login. Se o seu sistema roda uma versão com suporte, o caminho é atualizar hoje. Se roda PHP 7.4, 8.0 ou 8.1, não existe versão oficial corrigida: a CISA pede tirar esses sistemas do ar até corrigir ou atualizar, e a escolha seguinte fica entre backport, upgrade de versão e modernização. Este texto serve para as duas situações.

As fontes são o anúncio do projeto PHP, os alertas de agências de segurança e os textos de quem participou da descoberta ou monitora ataques, todos com link e data. Citações em tradução nossa. A Ithaca não participou da descoberta nem da correção dessas falhas.

O que é o PHP2Shell

PHP2Shell é o apelido de duas vulnerabilidades no próprio PHP, a CVE-2026-109618 e a CVE-2026-109619. O nome aparece no alerta da NSA de 21 de outubro de 2026, segundo o qual as falhas estão no PHP, e não na aplicação hospedada nem na configuração dela. Pelo alerta, elas podem permitir que um atacante assuma o servidor web sem acesso prévio e sem autenticação.

O anúncio de segurança do projeto PHP, da mesma data, descreve as duas:

  • CVE-2026-109618, corrupção de memória no tratamento de falta de memória (OOM). Quando falta memória, o PHP pode ser interrompido com dados internos da requisição só parcialmente inicializados, e a limpeza da requisição pode tratar esses dados inválidos como válidos.
  • CVE-2026-109619, estado global obsoleto. Um estado interno que pertence a uma requisição pode sobreviver depois que a memória por trás dele foi liberada. Uma requisição seguinte, atendida pelo mesmo worker, pode usar esse estado antes que a inicialização normal o reponha.

O Cyber Centre do Canadá classifica as duas como use-after-free (CWE-416). No aviso prévio de 20 de outubro, o projeto PHP deu às duas a nota 9,2 na escala CVSS v4.0.

Quem é afetado

Segundo o projeto PHP, toda instalação que atende requisições web está em risco, incluindo PHP-FPM, Apache com mod_php, php-cgi, FrankenPHP e LiteSpeed. O risco é maior no mod_php: há um exploit demonstrado em que uma requisição sem autenticação dispara o ataque antes de qualquer código da aplicação rodar. A PHP Foundation acrescenta que, no PHP-FPM, a execução remota foi confirmada por caminhos que passam pelo código da aplicação.

Três consequências práticas:

  • Código bem escrito não basta. A falha está no motor da linguagem. O Wiz, que demonstrou o ataque em WordPress, Drupal e Joomla, afirma que até uma aplicação "Hello World" numa versão afetada pode ser vulnerável.
  • PHP 8.1 e anteriores também estão afetados, e o projeto PHP não publica mais versões para eles. O CERT-EU põe esses ramos em fim de vida na lista de produtos afetados. Segundo o Wiz, versões desde o PHP 5.4 têm pelo menos um dos problemas.
  • O PHP pode estar onde ninguém olha. O NCSC-NL lembra que o PHP vem embutido em appliances, equipamentos de rede, interfaces de gestão e produtos de terceiros, nos quais o administrador pode não conseguir atualizar o PHP diretamente.

No dia 21, o CERT-EU registrava provas de conceito em circulação. A CISA e o Cyber Centre diziam não ter observado exploração ativa até a publicação dos alertas, e o Cyber Centre avisava que isso podia mudar rápido. No mesmo dia, a Amazon relatou tentativas de exploração contra os sensores-isca (honeypots) dela desde 17 de outubro, quatro dias antes do anúncio, e escreveu que, depois da correção, a falha passou a ser explorada em larga escala. A própria Amazon diz que não estava claro se as tentativas anteriores ao anúncio teriam dado certo em um sistema real.

Como verificar a versão do PHP

  • No terminal do servidor: php -v mostra a versão do PHP de linha de comando, como descreve o manual do PHP. O manual mostra que a saída traz também o SAPI, no exemplo cli. Para saber a versão que atende o site, confira também pelo servidor web.
  • Pelo servidor web: um arquivo com <?php phpinfo(); mostra a versão e a configuração do PHP que atende o site. Apague o arquivo em seguida: segundo o manual, a página lista opções de compilação, extensões, ambiente, configuração e cabeçalhos HTTP, e isso não deve ficar público.
  • No painel da hospedagem: em hospedagem compartilhada, procure a versão do PHP no painel ou pergunte ao suporte qual versão atende o seu site e quando o pacote corrigido entra.
  • No WordPress: a tela Ferramentas > Diagnóstico > Informação (Tools > Site Health > Info, na interface em inglês), seção Servidor, mostra a configuração do servidor, e a aba Status avisa quando o site roda uma versão desatualizada do PHP, segundo a documentação do WordPress.

Se o PHP veio de pacote da distribuição Linux, não pare no número da versão. Segundo o projeto PHP, distribuições e fornecedores de suporte estendido (LTS) receberam as correções antes do anúncio, e é com eles que se confirma o pacote corrigido. Confira o aviso de segurança do seu fornecedor.

Quais versões estão corrigidas

RamoVersão corrigidaSuporte de segurança do projeto PHP
8.58.5.12até 31 dez. 2029
8.48.4.27até 31 dez. 2028
8.38.3.36até 31 dez. 2027
8.28.2.35até 31 dez. 2026
8.1, 8.0 e 7.4nenhuma versão oficial; backport mínimo de código-fonteencerrado em 31 dez. 2025, 26 nov. 2023 e 28 nov. 2022

As versões corrigidas saíram em 21 de outubro de 2026. Os prazos vêm das páginas de versões suportadas e de ramos sem suporte do projeto PHP. O 8.2.35 corrige o PHP2Shell, mas o ramo 8.2 sai do suporte em 31 de dezembro de 2026. Na nossa leitura, quem sobe agora para o 8.2 ganha pouco tempo, e quem pode deve mirar o 8.3 ou uma versão mais nova.

Quem usa o repositório voluntário rpms.remirepo.net deve trocar para os pacotes da distribuição ou compilar a partir do código-fonte, pede o projeto PHP, porque o repositório não teria atualização no dia do anúncio.

O que fazer se não dá para atualizar hoje

Só a atualização resolve. Nas palavras do projeto PHP, as medidas abaixo reduzem a exposição a caminhos de ataque específicos, mas não deixam a instalação segura.

  • Inventário primeiro. NSA, CISA e NCSC-NL pedem o mesmo começo: listar tudo o que roda PHP, a começar pelo que está exposto à internet, incluindo produtos de terceiros, appliances e imagens de contêiner.
  • Tirar do ar ou isolar. A NSA diz que, se a atualização imediata não for viável, o sistema deve sair do ar até ser totalmente mitigado. A CISA pede o mesmo a quem não consegue atualizar já ou continua no PHP 8.1 ou anterior: tirar do ar os sistemas em PHP até corrigir ou atualizar. O CERT-EU e o Cyber Centre falam em isolar da rede pública as aplicações expostas até a correção.
  • Backport do fornecedor. Para PHP 8.1 e anteriores, distribuições e fornecedores de LTS oferecem correções retroportadas. O projeto PHP publicou backports mínimos de código-fonte para 7.4, 8.0 e 8.1, para quem compila o PHP ou não tem fornecedor de LTS.
  • Ajustes de configuração do PHP. O anúncio lista medidas para cada falha, entre elas memory_limit=-1, de preferência definido de um jeito que a aplicação não consiga mudar e com limite de memória no contêiner ou no cgroup, post_max_size baixo e session.upload_progress.enabled=0 com reinício de todos os workers. Ele também diz onde aplicar cada uma e o que não usar no lugar. Cada medida bloqueia só caminhos de ataque já confirmados. Aplique a partir do texto do anúncio, não de um resumo.
  • Limites no servidor web, no proxy ou no WAF. O projeto PHP sugere limitar no servidor web ou no proxy o tamanho da requisição decodificada, a quantidade de campos, de partes multipart e de cabeçalhos, e a profundidade de aninhamento. A CISA diz que um WAF pode dar alguma proteção até a atualização. Segundo o BleepingComputer, a Cloudflare publicou regras de WAF para os métodos de ataque conhecidos e chamou essas proteções de temporárias.
  • Mais logs e mais atenção. A NSA pede registro reforçado no ambiente. O Cyber Centre pede revisão dos logs de servidor web, aplicação, autenticação e endpoint, e investigação de processos, comandos, arquivos, contas ou conexões de saída inesperados ligados ao PHP. O Wiz aponta como sinais requisições multipart incomuns seguidas de erros de limite de memória ou de respostas HTTP 500 repetidas, e cookies PHPSESSID grandes ou malformados. A CISA pede atenção a workers do PHP que abrem shells ou baixam ferramentas, e a Amazon sugere começar a investigação em 17 de outubro, não na data do anúncio.

Preso numa versão sem suporte: backport, upgrade ou modernização

Entre as medidas, a NSA inclui substituir serviços de PHP em fim de vida, que não vão ser compatíveis com a correção. Para quem roda 7.4, 8.0 ou 8.1, a urgência desta semana esconde uma decisão maior. São três caminhos, e eles se combinam.

CaminhoO que éA favorContra
BackportAplicar a correção no PHP antigo, por pacote de fornecedor de LTS ou pelo backport mínimo do projeto PHPRápido; o código da aplicação não mudaO ramo continua sem suporte do projeto; a próxima falha pede outro backport; o backport mínimo exige compilar o PHP
Upgrade de versãoLevar a aplicação para o 8.3 ou uma versão mais novaVolta a receber correção oficial, para esta falha e para as próximas, dentro do prazo de suporteEsbarra em dependências, extensões removidas e falta de testes; o prazo depende do tamanho do sistema e da cobertura de testes
ModernizaçãoTrocar o sistema por partes, com o novo construído ao lado do antigoAtaca a dívida que prendeu o sistema na versão velha; cada parte nova nasce numa versão com suporte e com testesÉ o caminho mais longo e, sozinho, não resolve a urgência desta semana

Na nossa leitura, a ordem que faz sentido é fechar a porta desta semana primeiro (backport, isolamento ou, como pede a CISA para versões sem suporte, tirar do ar) e fazer o upgrade ou a modernização em seguida, para não depender de backport na próxima falha. Lift and shift, sozinho, não entra na lista: levar o sistema para outro servidor sem mudar a aplicação não muda o código que prende o sistema à versão antiga (lift and shift vs modernização).

Por que "só atualizar o PHP" trava em código legado

  • Extensões e funções removidas. O PHP 7.0 removeu extensões como mysql e ereg, segundo o manual do PHP. O PHP 8.0 removeu funções como each() e create_function() e mudou outros comportamentos, listados nas mudanças incompatíveis do PHP 8.0. Quem está no 7.4 ainda tem essa passagem pela frente.
  • Dependências. Antes do upgrade, confira que versões do PHP o framework e cada biblioteca aceitam. Se algum deles só roda na versão velha, o upgrade do PHP passa a incluir o upgrade dele, com as mudanças de API que vierem junto.
  • Falta de testes. Sem testes que fixem o comportamento atual, não há como confirmar antes do deploy o que o upgrade mudou. Por isso, no guia de modernização, o passo que vem antes de mexer é fixar o comportamento atual com testes de caracterização.
  • Conhecimento concentrado. Quando só uma ou duas pessoas sabem por que cada parte existe, o upgrade espera a agenda delas (falta de desenvolvedor para sistemas antigos).

O próprio projeto PHP passou por isso. Segundo a PHP Foundation, os primeiros sinais do problema por trás da CVE-2026-109618 apareceram em 2024, durante uma auditoria externa, e a correção travou e recomeçou por meses porque cada solução trazia um efeito colateral: quebra de compatibilidade, risco novo de negação de serviço ou mudança em extensões de terceiros. A fundação chama o atraso de falha estrutural. Na nossa leitura, é o mesmo mecanismo da dívida técnica em sistemas legados: toda opção de correção tinha um custo, e a decisão foi ficando para depois (o que é um sistema legado e custo da dívida técnica).

O que a IA mudou nessa história

Segundo o Wiz, modelos de IA de fronteira ajudaram a achar as falhas e tornaram prático montar exploits que funcionam em alvos diferentes. O texto do Wiz diz que, com esses modelos e as ferramentas certas, um pesquisador fez numa semana o que antes levaria meses de trabalho de um time de primeira linha. A PHP Foundation conta a outra parte: a Calif e a OpenAI reportaram o mesmo problema de raiz em 11 de agosto, o Wiz mandou outros vetores de ataque em 24 de agosto, e a pesquisa assistida por IA também aumentou o volume de relatos que o time de segurança do PHP recebe. A IA ajuda a validar e agrupar relatos, mas, segundo a fundação, uma pessoa decide cada caso e trabalha em cada correção.

Na nossa leitura, o que muda para quem tem código legado é o custo de quem ataca. Uma falha antiga e difícil de explorar ficava protegida, na prática, pela própria dificuldade, e o Wiz escreve que essa complexidade pode deixar de ser uma barreira. Isso não quer dizer que todo sistema antigo vai ser atacado amanhã. Quer dizer que adiar a atualização ficou mais caro.

O outro lado também vale. As mesmas ferramentas que leem código antigo em busca de falhas também podem ser usadas para documentar regras de negócio, escrever testes e trocar o sistema por partes. A diferença está em quem supervisiona e no que fica registrado (só aprove o que você sabe explicar e segurança em agentes de IA para código).

Onde a Ithaca entra

A Ithaca trabalha com modernização de sistemas legados numa plataforma de desenvolvimento agentic no nível 4 de autonomia: os agentes de código leem o sistema atual, escrevem testes que fixam o que ele faz hoje e constroem cada parte nova, e o time decide a ordem e lê o que vai para produção. Cada sessão fica registrada. O método para sistemas que não podem parar está em modernização de sistemas legados com IA, sem parar a operação.

Isso não substitui a correção desta semana. Para o PHP2Shell, o caminho é o deste texto: atualizar, aplicar o backport ou isolar.

Se o sistema ficou preso numa versão sem suporte e cada atualização parece um projeto em si, o próximo passo é mapear o que ele faz e por onde começar a troca. Agendar demonstração

Perguntas frequentes

O que é o PHP2Shell?

É o apelido de duas vulnerabilidades críticas no próprio PHP, a CVE-2026-109618 e a CVE-2026-109619, corrigidas em 21 de outubro de 2026. Segundo o projeto PHP, elas podem permitir execução remota de código sem autenticação em instalações que atendem requisições web. As duas têm nota 9,2 na escala CVSS v4.0.

Como saber a versão do PHP do meu site?

No servidor, o comando php -v mostra a versão do PHP de linha de comando. Para ver a versão que atende o site, use um arquivo com phpinfo() e apague o arquivo em seguida, ou confira no painel da hospedagem. No WordPress, a tela Ferramentas > Diagnóstico (Tools > Site Health, em inglês) mostra a configuração do servidor. Se o PHP vem de pacote da distribuição Linux, confira também o aviso de segurança do fornecedor.

Quais versões do PHP corrigem o PHP2Shell?

PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35, lançadas em 21 de outubro de 2026. Segundo o projeto PHP, o ramo 8.2 sai do suporte de segurança em 31 de dezembro de 2026, e o 8.3 recebe correções até 31 de dezembro de 2027.

Meu sistema roda PHP 7.4, 8.0 ou 8.1. Ele está afetado?

Está. O projeto PHP não publica mais versões para o 8.1 e anteriores, e o CERT-EU inclui esses ramos na lista de afetados. Há três saídas: pacote com correção retroportada de uma distribuição ou de um fornecedor de LTS, o backport mínimo de código-fonte que o projeto PHP publicou para 7.4, 8.0 e 8.1, ou o upgrade para uma versão com suporte. Se nada disso for possível agora, a NSA e a CISA indicam tirar o sistema do ar até a correção.

Meu site é WordPress. Atualizar o WordPress e os plugins resolve?

Não. A falha está no PHP, não na aplicação. A NSA diz que as falhas não estão na aplicação hospedada nem na configuração dela, e o Wiz demonstrou o ataque em WordPress, Drupal e Joomla. Quem resolve é a atualização do PHP, feita pela hospedagem ou por quem administra o servidor.

Um WAF resolve o PHP2Shell?

Ajuda, mas não resolve. Segundo a CISA, um WAF pode dar alguma proteção até a atualização, e a Cloudflare, segundo o BleepingComputer, chamou as suas regras de temporárias. O projeto PHP afirma que só a atualização é uma solução completa; as demais medidas reduzem a exposição sem deixar a instalação segura.

Por que atualizar a versão do PHP às vezes quebra o sistema?

Porque versões novas removem ou mudam partes da linguagem. O PHP 7.0 removeu extensões como mysql e ereg, e o PHP 8.0 removeu funções como each() e create_function(). Também é preciso conferir se o framework e as bibliotecas aceitam a versão nova. Sem testes que fixem o comportamento atual, não há como confirmar antes do deploy o que mudou. Por isso o upgrade de código legado começa por testes de caracterização.

A descoberta do PHP2Shell foi feita por IA?

Em parte. O Wiz diz que modelos de IA de fronteira ajudaram a achar as falhas e a montar os exploits. A PHP Foundation conta que os primeiros sinais do problema de raiz apareceram em 2024, numa auditoria externa, e que Calif, OpenAI e Wiz reportaram o problema e vetores de ataque entre agosto e setembro de 2026. Segundo a fundação, a IA também ajuda o time do PHP a validar relatos, com uma pessoa decidindo cada caso.

Vale reescrever o sistema do zero em vez de atualizar o PHP?

Na nossa leitura, raramente de uma vez. Reescrever tudo de uma vez leva tempo e arrisca perder regras que só o sistema antigo conhece. A troca por partes, com o novo construído ao lado do antigo e cada parte coberta por testes, reduz o risco de cada passo. Para o PHP2Shell, primeiro vem a correção ou o isolamento; a modernização é a decisão seguinte.

Leia também

Fontes

Agendar demonstração

Comece pelo que está travado.

O projeto novo parado no backlog ou o sistema antigo que virou um fardo. A demonstração mostra os agentes trabalhando do pedido ao deploy, e a implantação começa pela parte que seu time escolher.

Veja a plataforma funcionando

Só isso. Sem cadastro, sem newsletter.

Como usamos seus dados: Política de privacidade.