A 21 de outubro de 2026, o projeto PHP publicou as correções de duas falhas críticas e, no mesmo dia, o CERT-EU divulgou o aviso 2026-018. Ambas estão classificadas com 9,2 e ambas são descritas como execução remota de código sem autenticação. Se gere um site WordPress, uma loja em linha ou qualquer outra aplicação PHP, isto diz-lhe respeito, e a solução é uma atualização, não uma definição de configuração. Este artigo explica o que se sabe, como o ataque entra e o que deve fazer. Ponto de situação a 22 de outubro de 2026, com base na versão 1.1 do aviso do CERT-EU.
O que aconteceu
- Versão de segurança anunciadaO PHP anuncia antecipadamente uma versão de segurança
- Correções publicadas8.5.12, 8.4.27, 8.3.36 e 8.2.35
- Aviso 2026-018 do CERT-EUAmbas as falhas classificadas com 9,2
- Circula código de prova de conceitoAtaques não confirmados, mas mais prováveis
O PHP anunciou uma versão de segurança a 20 de outubro e publicou as correções a 21 de outubro, às 13:30 UTC. O CERT-EU intitulou o seu aviso «Critical Vulnerabilities in PHP» e indica dois CVE: CVE-2026-109618 e CVE-2026-109619, cada um com uma pontuação de 9,2. O CERT-EU escreve ainda que os detalhes técnicos já são discutidos publicamente e que começou a circular um primeiro código de prova de conceito. O aviso não confirma ataques em curso, mas refere que isso torna mais provável que os atacantes já estejam a explorar as falhas. Trate o assunto como urgente.
Quem é afetado
As versões afetadas são todas as versões do PHP anteriores à corrigida num ramo com suporte, e todos os ramos que chegaram ao fim de vida.
| Ramo | Afetado abaixo de | Corrigido em |
|---|---|---|
| PHP 8.5 | 8.5.12 | 8.5.12 |
| PHP 8.4 | 8.4.27 | 8.4.27 |
| PHP 8.3 | 8.3.36 | 8.3.36 |
| PHP 8.2 | 8.2.35 | 8.2.35 |
| PHP 8.1 e anteriores | todas as versões | sem atualização regular; a equipa de segurança do PHP publicou retroportações mínimas do código-fonte para 7.4, 8.0 e 8.1 |
O CERT-EU menciona PHP-FPM, Apache com mod_php, php-cgi, FrankenPHP e LiteSpeed. Segundo a equipa do PHP, o mod_php apresenta o risco mais elevado. Também os produtos que incorporam o PHP podem ser afetados; o CERT-EU remete para uma lista do NCSC neerlandês no final deste artigo. Conta qualquer instalação que responda a pedidos web, tenha ou não um formulário de envio de ficheiros.
Como um atacante chega à primeira falha
Ninguém tem de iniciar sessão. Segundo o CERT-EU, uma exploração demonstrada prova que um único pedido sem autenticação pode desencadear o ataque antes de qualquer código da aplicação ser executado. É este o ponto que a maioria ignora: não importa se o seu WordPress está atualizado, se os seus plugins estão corrigidos ou se o seu formulário de contacto está protegido. O pedido chega primeiro ao motor do PHP.
A primeira falha, CVE-2026-109618, funciona assim:
- Chega um pedido a um endereço que o PHP serve. Sem início de sessão, sem conta.
- O PHP começa a ler o corpo do pedido. O CERT-EU dá como exemplo a análise dos envios de ficheiros através de formulários.
- O PHP aplica o seu
memory_limitcomlongjmp(). Quando o limite é excedido, abandona de repente o que estava a fazer e termina o pedido. - Se isso acontecer a meio da preparação dos dados internos do pedido, esses dados ficam construídos apenas em parte.
- A limpeza posterior trata os dados inválidos como válidos e liberta memória que nunca foi inicializada. Essa memória pode ainda conter dados de atribuições anteriores que o atacante controlava.
- A partir daí, o aviso descreve a execução remota de código no servidor.
Não descrevemos de propósito como o atacante conduz o último passo. Basta saber que o ponto de entrada não é a sua aplicação, e é por isso que nada dentro da sua aplicação o pode travar.
A segunda falha: um estado que sobrevive à sua memória
A CVE-2026-109619 é um mecanismo diferente com o mesmo resultado. O PHP mantém um estado interno para cada pedido. Após certas falhas, como um erro fatal, esse estado pode permanecer, mesmo que a memória subjacente já tenha sido libertada. O pedido seguinte tratado pelo mesmo processo de trabalho pode então usar esse estado obsoleto antes de ele ser reposto da forma habitual. O atacante precisa de dois pedidos que cheguem ao mesmo processo de trabalho; o CERT-EU classifica o resultado como o da primeira falha: execução remota de código.
O que fazer hoje
O PHP do seu servidor é anterior a 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, ou é 8.1 ou anterior?
- SimAfetado por ambas as falhas. Passe à pergunta seguinte.
- NãoCorrigido para ambas as falhas, desde que esta seja de facto a versão que o seu servidor web executa.
Pode atualizar hoje?
- SimAtualize, reinicie todos os processos de trabalho do PHP e verifique a versão em execução.
- NãoRetire o servidor das redes públicas até estar corrigido. Os limites apenas reduzem o risco.
- Descubra que versão do PHP serve realmente o seu site. O comando
php -vna linha de comandos mostra a versão da linha de comandos, que pode ser diferente da que o seu servidor web utiliza. Verifiquephp-fpm -v, o seu painel de alojamento ou uma página que chamephpinfo(). Em alojamento partilhado, pergunte ao seu fornecedor. - Atualize para uma versão corrigida: 8.5.12, 8.4.27, 8.3.36 ou 8.2.35. As distribuições costumam incorporar as correções sem alterar o número da versão, por isso procure os números CVE no aviso de segurança do seu fornecedor. Em contentores, reconstrua a partir de uma imagem de base atualizada. A equipa do PHP observa que rpms.remirepo.net não tinha atualizações no dia da publicação e recomenda os pacotes da distribuição ou uma compilação a partir do código-fonte.
- Reinicie todos os processos de trabalho do PHP. Uma atualização em disco não altera os processos que já estão em execução. Reinicie o PHP-FPM ou o servidor web e volte a verificar a versão em execução.
- Se hoje não puder atualizar, isole o servidor das redes públicas até a correção estar instalada e verificada. O CERT-EU é claro: só uma atualização corrige totalmente estas falhas.
- Se utiliza o PHP 8.1 ou anterior, peça ao seu fornecedor a retroportação ou passe para um ramo com suporte. Estas versões não recebem atualizações regulares.
Medidas paliativas que reduzem o risco, mas não o eliminam
O CERT-EU enumera medidas que tornam um ataque mais difícil. Afirma claramente que não tornam uma instalação segura. Utilize-as enquanto prepara a atualização, não em vez dela.
- Contra a CVE-2026-109618: defina
memory_limit=-1de modo que as aplicações não o possam alterar, por exemplo comphp_admin_valueno grupo de processos do FPM, e verifique que nenhum grupo, diretório ou aplicação volta a definir um limite finito. Defina umpost_max_sizebaixo (8M sem envios de ficheiros, 32M com eles) e mantenhaupload_max_filesizeabaixo dele. Limite o tamanho do pedido, o número de campos, as partes de formulário em várias partes, o número de cabeçalhos e a profundidade de aninhamento no servidor web ou no proxy. Utilize um limite de memória do contentor ou do cgroup como fronteira de disponibilidade, mas nãoRLIMIT_ASnemRLIMIT_DATA, que podem provocar a falha de atribuição vulnerável. - Contra a CVE-2026-109619: defina
session.upload_progress.enabled=0nophp.ini, no grupo de processos do FPM ou numa configuração do servidor que se aplique antes da análise do pedido (não comini_set()nem com.user.ini), e reinicie todos os processos de trabalho. No PHP 8.5, defina tambémfatal_error_backtraces=0. Remova as definições inválidas ou desatualizadas, por pedido, que escrevem diagnósticos antes da inicialização, e corrija os erros fatais e os tempos limite de execução que um atacante consiga provocar.
O que o SilentShield pode e não pode fazer neste caso
Isto não é um problema de bots, e preferimos dizê-lo a deixar que uma página de produto sugira o contrário. O ataque atinge o motor do PHP antes de o pedido chegar a qualquer elemento nosso, ou a qualquer CAPTCHA, plugin ou regra de firewall dentro da sua aplicação. Uma proteção contra bots num formulário não o trava, e ninguém deve dizer-lhe que sim. A única solução completa é a atualização do PHP.
A API e o painel do SilentShield não estão escritos em PHP. O plugin do WordPress e o SDK de PHP correm dentro do seu próprio PHP, pelo que, para eles, a atualização tem de ser feita no seu servidor. Depois de atualizar, a proteção habitual contra bots e spam em formulários é tão útil como antes; simplesmente nunca foi a resposta a isto.