Todos os posts

PHP php2shell: onde o PHP roda na sua infraestrutura?

5 min de leituraRedigido com IA, editado e aprovado por Mat Caniglia

Duas falhas críticas no PHP permitem execução remota de código sem login. O patch é simples. O trabalho está em achar todo PHP da frota.

Em 21 de outubro de 2026, o PHP lançou as versões 8.5.12, 8.4.27, 8.3.36 e 8.2.35 para corrigir duas falhas críticas, CVE-2026-109618 e CVE-2026-109619, que permitem execução remota de código sem autenticação. Atualizar é simples. O difícil é achar o PHP escondido em imagens de fornecedor, appliances e apps de terceiros, e trocar o que ainda roda 8.1 ou anterior.

O que aconteceu com o PHP em 21 de outubro?

O projeto PHP publicou quatro versões de correção em 21 de outubro de 2026 para fechar duas falhas críticas. Com elas, um atacante sem login consegue executar código no servidor. No mesmo dia, a CISA soltou um alerta pedindo patch imediato. O Centro Canadense de Segurança Cibernética emitiu o próprio alerta e o atualizou em 23 de outubro.

As duas falhas são do tipo use after free e ganharam o apelido de php2shell. O centro canadense lista como afetadas todas as releases 8.5, 8.4, 8.3 e 8.2 anteriores às versões corrigidas.

Até a publicação dos alertas, ninguém tinha reportado exploração ativa. Só que o centro canadense cita relatos em fontes abertas de uma prova de conceito pública. E avisa que o cenário pode mudar rápido. Vale tratar essa calmaria como temporária.

Em 23 de outubro, o projeto PHP revelou uma terceira falha, a CVE-2026-115560, que as releases de 21 de outubro não corrigem. Ela depende de uma configuração incomum. A aplicação precisa trocar o serializador de sessão para o handler php em tempo de execução, antes de iniciar a sessão. O upload progress também precisa estar ativo. A mitigação provisória é session.upload_progress.enabled=0, que o projeto já indicava para a CVE-2026-109619.

Quais instalações de PHP estão vulneráveis ao php2shell?

Toda instalação de PHP que atende requisições web está exposta. O centro canadense cita PHP-FPM, Apache com mod_php, php-cgi, FrankenPHP e LiteSpeed. O projeto PHP considera o mod_php o caso mais grave. Nele, um exploit demonstrado dispara com uma requisição sem autenticação antes de qualquer código da aplicação rodar.

Esse detalhe muda a triagem. Num host com mod_php, o middleware do framework, a validação de entrada e a autenticação da aplicação nem chegam a agir. A ordem fica assim: primeiro os servidores mod_php expostos à internet, depois qualquer outro PHP exposto e por último as aplicações web internas.

As versões 8.1 e anteriores não recebem correção do projeto PHP. Para elas sobram duas saídas. Um backport confirmado pelo fornecedor ou a migração para um branch suportado.

Como descobrir onde o PHP roda na sua infraestrutura?

O PHP costuma aparecer em software que ninguém do time associa a PHP. A CISA lembra que ele muitas vezes é componente de outro produto e pode nem estar visível. O centro canadense pede que as empresas mapeiem produtos de terceiros, appliances e containers com PHP embutido.

Um jeito prático de dividir a busca é por quem controla o upgrade.

Onde o PHP roda Como encontrar Como corrigir
Hosts que você administra Rode php -v para cada versão e liste as versões em /etc/php Atualize todas as versões instaladas e reinicie o PHP-FPM e os workers de longa duração
Imagens de container Procure um binário php nas camadas da imagem ou no SBOM, inclusive em tags base antigas fixadas Rebuild sobre uma base corrigida e novo deploy, porque o container em execução mantém o binário antigo
Appliances e apps de fornecedor Pergunte a cada fornecedor se o produto embute PHP e em qual versão Atualização do fornecedor, ou isolamento de rede até ela sair
Hospedagem gerenciada e ferramentas de servidor Leia as notas do provedor sobre como ele instala e atualiza o PHP Depende do provedor, então confirme em vez de supor
PHP 8.1 ou anterior Qualquer host ou imagem que reporte 8.1 ou menos Backport do fornecedor ou upgrade para 8.2 ou mais novo

Atualização automática de segurança só ajuda se cobrir o pacote de onde o PHP veio. Quando o PHP vem de repositório de terceiros, build próprio ou pacote de fornecedor, o host pode parecer em dia e ainda assim rodar um build vulnerável. O único jeito de saber é conferir a versão em execução.

Quanto trabalho dá o patch e o que pode dar errado?

Num host que o time controla, o patch é um upgrade de pacote e um restart de serviço. Conte com um restart rápido do PHP-FPM ou do Apache em cada host. Se der, faça isso num horário de pouco tráfego.

Processos PHP de longa duração, como workers de fila, provavelmente continuam rodando o que carregaram ao subir. Então reinicie esses também. Qualquer processo mais antigo que o upgrade conta como não corrigido até ser reiniciado.

Os pacotes podem chegar depois da release upstream, conforme quem os empacota. Confira a versão candidata antes do upgrade e a versão em execução depois. Um deploy verde não prova nada se o gerenciador de pacotes puxou o build antigo.

Onde o patch não pode sair agora, o centro canadense sugere tirar das redes públicas as aplicações expostas até a correção. O custo de pular tudo isso é um atacante externo executando código no servidor web. Ele herda as credenciais, o acesso a dados e o alcance de rede que esse host tiver.

O que verificar nesta semana

Limite o trabalho a cinco dias úteis, começando hoje.

Dia 1: monte o inventário. Consulte hosts, registries de container e SBOMs atrás de qualquer binário ou pacote PHP. Liste também todo produto de fornecedor que serve interface web. Marque quais estão expostos à internet e quais ainda usam mod_php.

Dia 2: leve o PHP exposto à internet para 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, começando pelos hosts com mod_php. Reinicie PHP-FPM, Apache e todo worker PHP de longa duração. Confirme a versão em execução em cada host.

Dia 3: faça o rebuild das imagens de container sobre bases corrigidas e o redeploy. Defina session.upload_progress.enabled=0 em todo lugar. A exceção é o app que precisa do upload progress e nunca troca o serializador de sessão em tempo de execução.

Dia 4: peça a cada fornecedor que embute PHP a versão empacotada e uma data de correção. Isole qualquer appliance exposto à internet que fique sem resposta crível.

Dia 5: feche a lacuna do 8.1 e anteriores. Confirme que um backport do fornecedor cobre as duas CVEs ou coloque no plano um upgrade com data. Depois revise os logs do servidor web e dos endpoints desde 21 de outubro. Procure processos, arquivos, contas ou conexões de saída inesperados ligados ao PHP ou ao servidor web.

Fontes