CVE-2026-109618 (PHP2Shell): Guia para Gestores e CTOs
PHP2Shell sem jargão: quem está exposto, o que já foi corrigido, o que as mitigações não resolvem e as 7 perguntas para levar ao seu time.
por Cleverson Gouvêa

A CVE-2026-109618 e sua irmã, a CVE-2026-109619, formam o par apelidado de PHP2Shell: duas falhas no núcleo do PHP que permitem executar código no servidor sem login nenhum. Se a sua empresa tem site, loja, Moodle ou webhook em PHP, a pergunta é de negócio: quanto do seu faturamento roda num interpretador que ficou vulnerável na semana passada? Este guia traduz o incidente para quem decide.
TL;DR
- A CVE-2026-109618 (corrupção em falta de memória) e a CVE-2026-109619 (estado global obsoleto entre requisições) têm nota CVSS 4.0 de 9,2 e dispensam autenticação.
- Os identificadores vazaram em 20/10/2026; a correção saiu em 21/10/2026 nas versões 8.5.12, 8.4.27, 8.3.36 e 8.2.35.
- PHP 7.4 a 8.1 só tem backports mínimos de código-fonte. PHP 5.4 a 7.3 não tem correção nenhuma.
- Ajustes de configuração (
memory_limit=-1,session.upload_progress.enabled=0) reduzem o risco, mas não resolvem. Só atualizar resolve.- Em 23/10 saiu um alerta extra, a CVE-2026-115560, de vetor improvável.
O que é a CVE-2026-109618 e por que ela virou pauta de diretoria
Em linguagem de gestão: a CVE-2026-109618 é uma porta dos fundos no motor que executa o seu sistema, e não no seu sistema. Não importa se o ERP é impecável ou se o WordPress e o Moodle estão atualizados. A falha mora no interpretador PHP, a camada embaixo de tudo.
Segundo o aviso oficial do PHP, a CVE-2026-109618 acontece quando o tratamento de falta de memória (out-of-memory, ou OOM) interrompe o PHP enquanto dados internos da requisição ainda estão pela metade. Na limpeza, o PHP trata esse lixo como se fosse válido. Um atacante que provoque isso de propósito consegue corromper memória e, a partir daí, executar comandos.
A CVE-2026-109619 é outro caminho para o mesmo destino: um estado interno da requisição sobrevive depois que sua memória foi liberada (use-after-free), e a próxima requisição no mesmo processo usa esse resto. O PHP confirma também vazamento de memória.
Por que o 9,2 importa mais que o número
Nota alta aparece todo mês. O que coloca o PHP2Shell em outro patamar são três fatores:
- Sem autenticação: basta uma requisição HTTP, sem senha nem sessão.
- Antes do seu código rodar: no Apache com mod_php, o PHP diz que há exploit demonstrado em que a requisição dispara o ataque antes de qualquer linha da aplicação.
- Base instalada gigantesca: a Tenable cita a W3Techs: PHP roda em 69,3% dos sites cuja linguagem de servidor é conhecida.
Detalhe de rigor: os identificadores que vazaram traziam nota 10,0, depois corrigida para 9,2 pela PHP Foundation, segundo a Tenable. Fornecedor que ainda fala em "nota 10" está lendo fonte velha.
Linha do tempo: do vazamento ao alerta extra de 23/10
As datas da CVE-2026-109618 definem desde quando a sua empresa está exposta e o que o seu fornecedor deveria ter feito em cada dia.
| Data | O que aconteceu | Fonte |
|---|---|---|
| 17/10/2026 | Amazon Threat Intelligence registra tentativa de exploração em sua rede de honeypots MadPot, quatro dias antes da divulgação | Tenable |
| 20/10/2026 | Identificadores vazam; PHP antecipa a release de 22 para 21/10 e publica aviso prévio | Tenable, watchTowr, Huntress |
| 21/10/2026 | Saem 8.5.12, 8.4.27, 8.3.36 e 8.2.35; CISA emite alerta; watchTowr observa exploração em seus sensores | php.net, CISA, watchTowr |
| 23/10/2026 | Unit 42 atualiza o boletim; PHP publica alerta informativo da CVE-2026-115560 | Unit 42, php.net |
A Unit 42, da Palo Alto Networks, informou que o Cortex Xpanse identificou mais de 22,6 milhões de instâncias expostas potencialmente vulneráveis. É estimativa de superfície exposta, não de servidores invadidos. Outras medições citadas pela Tenable ficaram entre 1,3 e 1,9 milhão de hosts. A ordem de grandeza muda; a conclusão, não.
Sobre ataques reais, as fontes divergem. A Huntress não tinha visto exploração em seus parceiros até 20/10. A watchTowr relata exploração em seus honeypots desde 21/10. Até 23/10, as falhas ainda não estavam no catálogo KEV da CISA. Para quem decide: o exploit existe, foi demonstrado e já há gente testando. Esperar "ataque em massa confirmado" é esperar tarde demais.
Quem é afetado pela CVE-2026-109618 no PHP-FPM, mod_php, php-cgi, FrankenPHP e LiteSpeed
O PHP foi direto: toda instalação que atende requisições web está em risco. A lista oficial cita cinco formas de rodar PHP, e saber qual a sua empresa usa muda a urgência e o tipo de trabalho.
Mapa de risco por forma de execução
| Forma de execução | Onde costuma aparecer | Leitura de risco |
|---|---|---|
| Apache + mod_php | Servidores antigos, cPanel legado, VPS montada "à mão" | Maior risco segundo o PHP: exploit demonstrado antes do código da aplicação |
| PHP-FPM | Nginx, hospedagem gerenciada moderna, Moodle e Laravel em produção | Afetado; o PHP confirmou execução de comandos via processamento de upload |
| php-cgi | Ambientes legados, alguns painéis Windows | Trate como exposto |
| FrankenPHP | Stacks modernas, workers persistentes, containers | Afetado; workers de longa duração exigem reinício após o patch |
| LiteSpeed (LSAPI) | Hospedagens compartilhadas e painéis comerciais | Afetado; depende do fornecedor liberar o pacote |
Se você não sabe qual é a sua linha nessa tabela, esse é o primeiro achado do incidente. Em mais de 15 anos operando servidores PHP, Moodle e integrações com a API oficial do WhatsApp, vejo o inventário como o elo mais fraco, não o patch.
O que quase ninguém lembra de checar
A Datadog alerta que o PHP de linha de comando e o que atende a web podem ter versões diferentes. A equipe roda php -v, vê versão nova e conclui que está tudo certo, enquanto o FPM segue no binário antigo.
Também entra o equipamento que você nem sabe que roda PHP: fabricantes de appliances de rede publicaram avisos próprios sobre o PHP2Shell. Painel de firewall, NAS e sistema de câmera entram no inventário.
Versões corrigidas da CVE-2026-109618 e o problema real: o PHP antigo
A decisão mais cara mora aqui. Há correção oficial para quatro ramos:
| Ramo | Versão corrigida | Situação |
|---|---|---|
| 8.5 | 8.5.12 | Suportado |
| 8.4 | 8.4.27 | Suportado |
| 8.3 | 8.3.36 | Suportado |
| 8.2 | 8.2.35 | Só segurança; fim de vida em 31/12/2026 |
| 7.4, 8.0, 8.1 | Sem release oficial | Só backport mínimo de código-fonte ou pacote de distribuição/fornecedor LTS |
| 5.4 a 7.3 | Nenhuma | Sem correção do projeto PHP |
Repare no 8.2: quem vai para 8.2.35 resolve a CVE-2026-109618 hoje, mas o ramo morre em 31/12/2026, segundo o php.net. É correto como emergência, não como plano.
O dilema do PHP 7.x
Sistema preso em PHP 7.x é comum: ERP sob medida de dez anos atrás, Moodle nunca migrado, loja com plugin que "quebra se mexer". O projeto PHP publicou backports mínimos para 7.4, 8.0 e 8.1 no GitHub, para quem compila do código-fonte. Distribuições Linux e fornecedores de suporte estendido também liberaram pacotes corrigidos, às vezes sem mudar o número da versão, o que confunde scanners e auditorias.
Na prática, o gestor tem três caminhos para PHP antigo:
- Pacote corrigido da distribuição, quando existe: o mais rápido e seguro.
- Compilar com o backport: exige quem saiba compilar e manter PHP. É dívida técnica nova.
- Migrar de versão: o caminho certo, que raramente cabe numa semana.
Para PHP 5.4 a 7.3, não há caminho 1 nem 2. Sobra isolar o sistema da internet ou migrar.
Mitigações: o que reduz o risco e o que é falsa sensação de segurança
O PHP publicou ajustes de configuração contra a CVE-2026-109618 e a CVE-2026-109619 para quem não consegue atualizar imediatamente, e fez questão de dizer que não substituem a atualização. Use como ponte, nunca como destino.
Para a CVE-2026-109618
memory_limit = -1de forma que a aplicação não consiga sobrescrever. No PHP-FPM, isso é feito comphp_admin_value[memory_limit] = -1no pool.post_max_sizebaixo: 8M sem upload, 32M com upload, comupload_max_filesizeabaixo dele.- Limites de tamanho, quantidade de campos, partes e profundidade no servidor web ou proxy.
- Limite de memória por container ou cgroup que derrube só o processo afetado.
Para a CVE-2026-109619
session.upload_progress.enabled = 0nophp.iniou no pool do FPM, e reiniciar todos os workers. O PHP avisa: não confie emini_set()nem em.user.ini.- No PHP 8.5, também
fatal_error_backtraces = 0. - Esconder erros com
@não ajuda.
Armadilhas que derrubam servidores
memory_limit=-1 sem limite de container troca um risco por outro: um script mal escrito consome toda a RAM e derruba o banco junto. E o PHP desaconselha RLIMIT_AS e RLIMIT_DATA, que podem provocar justamente a falha de alocação que o exploit usa.
WAF ajuda, mas tem limite. A Cloudflare publicou regras para os vetores conhecidos e as chamou de paliativo, e elas só protegem o tráfego que passa por ela: o IP direto do servidor segue aberto se o firewall não fechar. Por fim, desligar session.upload_progress quebra barras de progresso de upload. Avise o time de produto antes.
CVE-2026-115560: o alerta de 23/10 e por que ele não muda a prioridade
Dois dias depois do patch, o PHP publicou um aviso informativo sobre a CVE-2026-115560, outra falha ligada a sessão e upload progress, que afeta inclusive as versões já corrigidas. A boa notícia: o vetor é improvável. Segundo o php.net, só se aplica se a aplicação configura session.serialize_handler como php_binary ou php_serialize, troca para php em tempo de execução com ini_set() antes do session_start() e mantém o upload progress ligado.
A correção vem na próxima release regular. Até lá, vale a mesma mitigação: session.upload_progress.enabled=0. O The Hacker News cobriu o alerta.
A CVE-2026-115560 não é motivo para adiar o patch da CVE-2026-109618 e quem já desligou o upload progress como mitigação ganhou proteção para as duas.
Decisões de negócio: o que perguntar ao seu time ou fornecedor esta semana
O papel do gestor não é compilar PHP, é fazer as perguntas certas e cobrar prazo. Esta é a lista que eu levaria para a reunião.
As sete perguntas
- Inventário: quais servidores, containers e appliances rodam PHP? Inclui o site institucional que a agência fez em 2019?
- Versão real da web: qual versão do PHP atende as requisições, não a do terminal?
- Status do patch: já estamos em 8.5.12, 8.4.27, 8.3.36 ou 8.2.35? Os workers foram reiniciados?
- Imagens Docker: as imagens foram reconstruídas e reimplantadas, ou o container antigo continua no ar?
- Legado: o que está em PHP 8.1 ou abaixo, e qual dos três caminhos vamos seguir para cada sistema?
- Indícios: alguém olhou logs de erro com "Unknown on line 0", falhas de segmentação no Apache e shells disparados pelo processo web desde 17/10?
- Responsável e prazo: quem assina cada item e até quando?
Quando atualizar já e quando não sair atualizando
Atualize no mesmo dia tudo em 8.2 a 8.5 exposto à internet: é versão de correção, com risco baixo de regressão.
Não salte de PHP 7.4 para 8.4 numa sexta à noite por pânico: mudança de ramo quebra plugin e código antigo. Isole primeiro (VPN ou lista de IPs), aplique pacote corrigido do fornecedor se existir e planeje a migração com teste.
Não confie em "minha hospedagem já corrigiu a CVE-2026-109618" sem prova. Peça a versão e a data do reinício por escrito.
Onde o incidente pode estar escondido
Webhooks são ponto cego clássico: o endpoint que recebe eventos da API oficial do WhatsApp ou do gateway de pagamento é público por definição. Se roda em PHP, vai para o topo da lista.
Homologação também: muita empresa protege produção e esquece o staging com a mesma base copiada e PHP velho. Para fechar as portas, o checklist de hardening de servidor Linux cobre o que vem depois do patch.
Custos: quanto custa agir agora versus depois
Não vou inventar valor médio de incidente; varia demais por porte e setor. Mas dá para comparar os tipos de custo da CVE-2026-109618, que é o que importa para priorizar.
Agir agora custa horas de equipe técnica: inventário, atualização, reinício, revisão de logs. Em 8.2+, costuma ser trabalho de dias. Em 7.x, soma-se isolamento e projeto de migração.
Agir depois custa o que custa qualquer execução remota de código: servidor invadido com os privilégios do processo web, banco e credenciais expostos, possível ransomware e, havendo dados pessoais, obrigações pela LGPD. O post sobre plano de resposta a vazamento de dados mostra quem avisa quem e em que prazo.
Há também um custo escondido: dívida técnica de versão. Uma empresa em PHP 8.3 resolve a CVE-2026-109618 numa janela de manutenção. Uma empresa em PHP 7.2 descobre que não tem patch e precisa de projeto. Para pequenas empresas sem time de segurança, a priorização segue a lógica de ransomware em pequenas empresas: o que fechar primeiro.
Se o seu time não tem fôlego para separar o urgente do importante, é aí que uma consultoria técnica independente se paga: alguém de fora mapeia, prioriza e entrega uma ordem de ataque.
Como a Agathas Web resolve isso
A Agathas Web opera servidores PHP desde 2008: hospedagem gerenciada, Moodle em produção, sistemas em PHP e Laravel e a API oficial do WhatsApp. Pela consultoria da Agathas Web, o trabalho começa pelo que os boletins não fazem: olhar o seu ambiente.
O que está incluso
- Inventário de exposição: servidores, containers, homologação, webhooks e appliances com PHP, e a versão real que atende a web.
- Matriz de decisão por sistema: atualizar já, aplicar pacote corrigido do fornecedor, compilar backport, isolar ou migrar, com custo e risco de cada opção.
- Mitigação segura enquanto o patch não sai, sem derrubar o servidor por falta de RAM.
- Busca por indícios nos logs e processos desde 17/10.
- Plano de migração para o que está em PHP 8.2 ou abaixo, antes do fim de vida de 31/12/2026.
Como funciona na prática
Quem conduz é o sócio/CTO, não um júnior. Para a CVE-2026-109618 o escopo é curto: diagnóstico, prioridades e execução do urgente. Se fizer sentido ir além, vira um diagnóstico técnico completo de 4 a 6 semanas, com relatório executivo e plano de ação, ou liderança técnica fracionada (CTO sob demanda).
Como contratar
Pela página de consultoria em tecnologia e segurança, conte o cenário (quantos sistemas, qual hospedagem, qual PHP) e respondemos com caminho e escopo. A recomendação vem do diagnóstico, não de pacote pronto.
Conclusão: a CVE-2026-109618 é um teste de governança, não só de patch
A CVE-2026-109618 vai ser corrigida na maioria dos servidores nas próximas semanas. Fica a pergunta: quanto tempo a sua empresa levou para saber onde roda PHP, em qual versão e quem responde por ele?
Resumo para levar à diretoria:
- Atualize hoje tudo em 8.2 a 8.5 e reinicie os workers.
- Trate mitigações como ponte, nunca como solução.
- Para PHP 8.1 ou anterior, isole primeiro e decida o caminho sistema por sistema.
- Planeje sair do 8.2 antes de 31/12/2026.
- Olhe os logs desde 17/10 em busca de indícios.
Se quiser um olhar externo para fazer esse inventário e montar a ordem de ataque, a consultoria da Agathas Web atende exatamente esse cenário.
Perguntas frequentes
O que é a CVE-2026-109618?
É uma falha crítica no núcleo do PHP, com nota CVSS 4.0 de 9,2, que permite execução remota de código sem autenticação. Ela acontece quando o tratamento de falta de memória interrompe o PHP com dados da requisição ainda pela metade, e a limpeza trata esse estado inválido como válido. Junto com a CVE-2026-109619 (estado global obsoleto entre requisições), forma o par conhecido como PHP2Shell. A correção saiu em 21/10/2026 nas versões 8.5.12, 8.4.27, 8.3.36 e 8.2.35.
Meu site em WordPress, Laravel ou Moodle está vulnerável ao PHP2Shell?
Se ele roda numa versão do PHP anterior às corrigidas, sim. A falha está no interpretador, não no WordPress, no Laravel ou no Moodle, então manter a aplicação e os plugins atualizados não protege. O que importa é a versão do PHP que atende as requisições web (PHP-FPM, mod_php, php-cgi, FrankenPHP ou LiteSpeed) e se os processos foram reiniciados depois da atualização. Peça ao seu time ou hospedagem a versão exata e a data do reinício, por escrito.
Desligar o session.upload_progress resolve a vulnerabilidade?
Não. O próprio PHP afirma que nenhuma mudança de configuração substitui a atualização. Desligar session.upload_progress.enabled e definir memory_limit=-1 de forma não sobrescrevível reduzem a exposição às rotas conhecidas, mas servem só como ponte até o patch. Atenção a dois efeitos colaterais: memory_limit=-1 sem limite de memória no container pode esgotar a RAM do servidor, e desligar o upload progress quebra barras de progresso de upload que dependem dele.
O que fazer se meu sistema ainda roda PHP 7.4 ou 8.1?
Não há release oficial para 7.4, 8.0 e 8.1. O projeto PHP publicou backports mínimos de código-fonte para quem compila o próprio PHP, e algumas distribuições Linux e fornecedores de suporte estendido liberaram pacotes corrigidos, às vezes sem mudar o número da versão. O caminho seguro é: isolar o sistema da internet, aplicar o pacote corrigido do fornecedor quando existir e planejar a migração para um ramo suportado. Para PHP 5.4 a 7.3 não existe correção, e a saída é isolar ou migrar.
A CVE-2026-115560 exige um novo patch de emergência?
Não. Publicada como alerta informativo em 23/10/2026, ela afeta inclusive as versões já corrigidas, mas o vetor é improvável: só se aplica quando a aplicação troca o session.serialize_handler para php em tempo de execução, antes do session_start(), com o upload progress ligado. O PHP vai corrigi-la na próxima release regular. Enquanto isso, a recomendação é manter session.upload_progress.enabled=0, a mesma mitigação já usada contra o PHP2Shell. Não adie o patch da CVE-2026-109618 por causa dela.
Posts relacionados

Resposta a Incidente PHP: Foi Invadido via PHP2Shell?
Atualizou o PHP? Ótimo, mas o patch não diz se alguém entrou entre 17 e 21/10. Veja como checar, conter e trocar credenciais.

Quem aplica patch PHP hospedagem compartilhada, VPS ou gerenciada no PHP2Shell
O PHP2Shell já tem correção, mas ela só vale quando alguém instala e reinicia. Veja quem faz isso no seu tipo de hospedagem.

PHP2Shell SaaS: o Risco de Vazamento Entre Clientes no PHP-FPM
Em SaaS multi-tenant, o worker que atendeu um cliente atende o próximo. Veja por que o PHP2Shell ameaça o isolamento e o que fazer.