Pular para o conteúdo
ProgramaçãoExplicação

PHP2Shell: as duas falhas críticas do PHP, explicadas

O PHP2Shell são duas falhas do PHP com nota 9.2 que podem permitir que uma única requisição assuma o controle de um servidor web. Como funcionam, quem está exposto e o que as corrige por completo.

Por

6 min de leitura

XLinkedIn

Traduzido automaticamente do original em inglês, que Claire Whitmore verificou e editou. Prevalece a versão em inglês. Como trabalhamos

PHP's GitHub security advisory GHSA-w8hw-w9fx-j79w, titled RCE via OOM corruption and marked Critical, listing patched versions 8.2.35, 8.3.36, 8.4.27 and 8.5.12.

Em números

CVSS v4.0 score PHP gives each flaw
9.2
date CISA listed both flaws as exploited
Oct 26
internet-exposed hosts running PHP, per one Shodan search
1.9M+

PHP2Shell é o apelido de duas falhas de segurança no PHP, a linguagem de programação que roda o WordPress, o Drupal e muitos outros sites. Elas são rastreadas como CVE-2026-109618 e CVE-2026-109619, e o PHP corrigiu ambas em 21 de outubro de 2026. O PHP dá nota 9.2 de 10 a cada uma e diz que um invasor sem conta pode usá-las pela internet.

O risco aumentou em 26 de outubro. Nesse dia, a Agência de Segurança Cibernética e de Infraestrutura dos EUA (CISA) adicionou as duas falhas ao seu catálogo de bugs sabidamente explorados, segundo a Tenable. As agências civis federais precisam corrigi-las até 29 de outubro.

O que é o PHP2Shell e quem o descobriu

PHP2Shell é um único nome para dois bugs separados. Os relatos divergem sobre quem o criou. O Insikt Group, da Recorded Future, diz que a Wiz Research, trabalhando com a empresa de segurança Calif e com a OpenAI, encontrou as falhas e lhes deu o nome. A Tenable atribui o nome a um vídeo da cadeia de exploração compartilhado pelo pesquisador Kirill Firsov, que deu o crédito a LCFR, da Calif.io.

A PHP Foundation deu crédito à Calif, à OpenAI e à Wiz, entre outros. Tanto a Calif quanto a Wiz disseram ter usado modelos de IA na pesquisa. A Calif diz que o caminho de código afetado mais antigo remonta ao PHP 5.4.0, informa a Tenable.

Como as duas falhas funcionam

Os dois bugs estão no código que o PHP executa no início e no fim de cada requisição web. Esse código roda antes que o código do próprio site, como um plugin do WordPress, tenha chance de agir.

Um servidor web mantém um conjunto de processos PHP de longa duração chamados workers. Cada worker responde a uma requisição, faz a limpeza e pega a próxima. Essa reutilização significa que sobras de uma requisição podem afetar a seguinte.

CVERótulo do PHPO que dá errado
CVE-2026-109618Corrupção por OOMO PHP fica sem memória enquanto monta os dados internos de uma requisição. A etapa de limpeza então trata os dados montados pela metade como válidos.
CVE-2026-109619Estado global obsoletoDados de uma requisição continuam apontando para memória que já foi liberada. A próxima requisição no mesmo worker pode usá-los antes que o PHP os redefina.

OOM é a sigla de out of memory, ou falta de memória. As duas falhas envolvem o que os programadores chamam de bug use-after-free: o programa continua usando um trecho de memória depois de devolvê-lo. Um invasor que controla o que vai parar nessa memória pode direcionar o programa.

A Recorded Future diz que os bugs incluem um use-after-free no código que lê os dados de progresso de upload da sessão. Esse é um recurso do PHP para acompanhar uploads de arquivos. Ele existe no PHP desde a versão 5.4.0 e vem ativado por padrão, informa a Recorded Future, citando dados do VirusTotal. Um bug relacionado vaza memória do worker. Segundo a Wiz, isso pode expor senhas, tokens de login, chaves de API e certificados das requisições de outras pessoas.

Quem está exposto ao PHP2Shell

O PHP diz que toda instalação que atende requisições web pode ser afetada. Ele cita PHP-FPM, Apache com mod_php, php-cgi, FrankenPHP e LiteSpeed, que são as principais formas de um servidor web executar o PHP. O PHP considera o mod_php, que executa o PHP dentro do próprio servidor web Apache, o de maior risco. Nele, uma única requisição sem login pode disparar um exploit já demonstrado antes de qualquer código da aplicação ser executado.

Um ataque não funciona em todo lugar. A Field Effect, uma empresa de segurança, diz que o sucesso depende da versão do PHP, do sistema operacional, do servidor web, das configurações dos workers e do layout da memória. O ataque “não parece ser universalmente confiável em todos os ambientes afetados”, escreveu a empresa.

Ainda assim, pesquisadores demonstraram tomadas de controle completas de aplicações populares. Segundo a Tenable, a Calif confirmou execução de código sem login em versões específicas do WordPress, Drupal, Joomla e Magento. A Trail of Bits obteve shells, ou seja, controle do servidor por linha de comando, no MediaWiki, Symfony, Laravel e phpBB.

O PHP também se esconde dentro de produtos que as pessoas não associam ao PHP. A Field Effect lista Palo Alto Networks, Citrix, F5, HPE, NetApp, QNAP e Trend Micro entre os fornecedores com produtos afetados. A Help Net Security informou em 22 de outubro que a Palo Alto diz que todas as versões de seus softwares PAN-OS e Panorama são afetadas, ainda sem uma versão corrigida.

A Tenable cita uma busca no Shodan feita por Henk Poley que encontra mais de 1,9 milhão de hosts expostos à internet rodando PHP. Rodar PHP não torna, por si só, um servidor vulnerável.

O que mudou e quando

Data (2026)Evento
19 de agostoA Wiz encontra a primeira falha com ferramentas de pesquisa assistidas por IA
24 de agostoA Wiz relata as falhas em privado à equipe de segurança do PHP
21 de setembroO PHP confirma o recebimento do relato e começa a trabalhar nas correções
17 de outubroOs servidores-isca da Amazon registram uma tentativa de exploração
20 de outubroO PHP anuncia uma versão de emergência para o dia seguinte
21 de outubroDetalhes vazam online horas antes de o PHP lançar 8.5.12, 8.4.27, 8.3.36 e 8.2.35
23 de outubroO PHP divulga a CVE-2026-115560, uma falha separada no progresso de upload
26 de outubroA Trail of Bits relata exploits funcionais; a CISA lista as duas falhas como exploradas

O PHP havia planejado a versão para 22 de outubro, segundo a PHP Foundation, e a antecipou após o vazamento. Cobrimos o aviso prévio e depois a versão de 21 de outubro à medida que aconteciam. A Amazon disse depois que seus honeypots, servidores-isca criados para atrair invasores, flagraram uma tentativa quatro dias antes da divulgação. A empresa não sabe como o invasor obteve os detalhes antes.

No lançamento, a PHP Foundation disse que “não identificou nenhum exploit funcional” no código que circulava online. Isso mudou em poucos dias. A Tenable informa que os honeypots de um pesquisador rodando PHP 8.4.26 foram explorados em 24 de outubro. A Trail of Bits tinha exploits funcionais contra o PHP 8.2 a 8.5 até 26 de outubro. A Recorded Future ainda alerta que “os relatos disponíveis não estabelecem toda a extensão da exploração bem-sucedida nem de comprometimentos confirmados”.

A falha de 23 de outubro é um problema separado que as versões de 21 de outubro não corrigem. O PHP a chama de “um vetor improvável de execução remota de código no progresso de upload da sessão”. Segundo a Field Effect, ela afeta aplicações que alteram session.serialize_handler durante a execução do programa, antes de chamar session_start(), com o progresso de upload ativado.

O que isso significa para os desenvolvedores

Atualizar é a única correção completa. Todo o resto só ganha tempo.

  • Atualize e depois reinicie cada worker. As versões corrigidas são 8.5.12, 8.4.27, 8.3.36 e 8.2.35. A Tenable observa que um pacote novo não corrige processos que já estão em execução. A Calif diz que o código antigo fica na memória até uma reinicialização.
  • Salve a memória primeiro se um servidor foi sondado. A orientação do Google Cloud, escrita com a Mandiant, diz para capturar a memória dos workers antes de reiniciar. Uma reinicialização apaga as evidências.
  • Trate mudanças de configuração como paliativo. A correção provisória do PHP para a primeira falha é memory_limit=-1, definida de forma que as aplicações não possam sobrescrevê-la. Para a segunda, é session.upload_progress.enabled=0, mais fatal_error_backtraces=0 no PHP 8.5.
  • Verifique o código de sessão por causa da CVE-2026-115560. Se uma aplicação altera session.serialize_handler antes de session_start(), desative o progresso de upload até a próxima versão regular do PHP.
  • Fique atento a travamentos do SimpleXML. A Tenable relata uma regressão, a issue #24488 do php-src, nas versões 8.4.27 e 8.5.12, que pode travar algumas aplicações com SimpleXML. Uma correção foi mesclada, mas ainda não tinha sido lançada até 26 de outubro.
  • Olhe além dos seus próprios servidores. Firewalls, equipamentos de armazenamento e ferramentas de segurança podem trazer o PHP embutido, então leia o comunicado de cada fornecedor. Revise os logs desde 17 de outubro.
  • Planeje um upgrade dos branches PHP 7.4 a 8.1. Esses branches recebem apenas patches mínimos de código-fonte, sem versão oficial. Pergunte à sua distribuição ou ao seu fornecedor de suporte sobre um backport.

Fontes

  1. PHP2Shell (CVE-2026-109618, CVE-2026-109619): Frequently asked questions about critical PHP remote code execution vulnerabilities - Tenable
  2. PHP2Shell Exploitation: Two Critical PHP Flaws Explained - Recorded Future
  3. PHP2Shell: Critical PHP vulnerabilities patched, update now! - Help Net Security
  4. Another PHP issue identified while vendors report affected products - Field Effect

Artigos relacionados