Mettricio
← Todos os artigos

Segurança de aplicações

Falhas críticas do PHP: da corrupção de memória à proteção da operação

· Equipe de engenharia Mettric

Uma requisição HTTP não deveria comprometer o processo que atende seu sistema. As CVE-2026-109618 e CVE-2026-109619 rompem essa fronteira em condições específicas de gerenciamento de memória e ciclo de vida das requisições. Entender a diferença entre os dois mecanismos ajuda a priorizar a correção e a verificar se ela realmente chegou à aplicação.

Servidores e escudo vermelho ilustram a proteção da infraestrutura PHP.

O que essas vulnerabilidades mudam

As falhas atingem o núcleo do PHP, abaixo de frameworks como Laravel, Symfony e WordPress. Uma aplicação pode manter seus pacotes atualizados e ainda executar sobre um interpretador vulnerável. O impacto potencial é execução remota de código com os privilégios do processo PHP; o alcance sobre arquivos, segredos e outros serviços depende das permissões e do isolamento do ambiente.

As correções foram publicadas em 21/10/2026. O PHP atribui CVSS 4.0 de 9.2 às duas CVEs; o NVD registra CVSS 3.1 de 9.8 para a CVE-2026-109618. São avaliações com versões e vetores distintos. A existência de PoCs públicos aumenta a urgência, mas não comprova comprometimento nem exploração universal.

Versões oficiais com correção

SérieVersões afetadas na sériePrimeira versão corrigida
PHP 8.28.2.0–8.2.348.2.35
PHP 8.38.3.0–8.3.358.3.36
PHP 8.48.4.0–8.4.268.4.27
PHP 8.58.5.0–8.5.118.5.12

A tabela descreve as séries oficiais suportadas. Backports de distribuições podem usar outro número de pacote: confirme o boletim e a revisão do fornecedor. PHP 8.1 e anteriores estão fora do suporte regular oficial; fornecedores LTS e backports de emergência exigem avaliação própria.

CVE-2026-109618 · quando a interrupção deixa a memória inválida

O tratamento de falta de memória (out-of-memory, OOM) pode interromper uma operação enquanto estruturas internas da requisição ainda não estão completamente inicializadas. Mais tarde, a rotina de encerramento pode tratar esse estado incompleto como válido. O problema é a segurança da limpeza após a interrupção, e não simplesmente “consumir muita RAM”.

No mod_php, há demonstração de execução remota antes do código da aplicação. No PHP-FPM, falhas durante o startup podem encerrar o filho, mas caminhos durante a execução da aplicação também precisam ser considerados. Por isso, uma página de login e validações implementadas apenas no framework não formam uma barreira suficiente.

01 / Memória interrompida, limpeza inseguraUma interrupção por OOM pode deixar uma estrutura parcialmente inicializada. A limpeza posterior usa um estado que não deveria ter sido considerado válido.
  1. 01Entrada HTTP

    O processo começa a tratar a requisição.

  2. 02Alocação em andamento

    Estruturas internas ainda estão incompletas.

  3. 03Interrupção por OOM

    O fluxo sai antes de concluir a inicialização.

  4. 04Limpeza insegura

    Estado inválido pode levar à corrupção de memória.

Esquema conceitual: as etapas mostram a causa da falha, sem representar um exploit universal.

CVE-2026-109619 · memória liberada, referência ainda viva

A segunda falha atravessa a fronteira entre requisições. Um worker persistente retém uma referência global a memória que pertencia à requisição anterior. Se o estado não for limpo corretamente antes de liberar essa memória, uma operação posterior pode acessá-la como se ainda estivesse válida: é o padrão use-after-free.

O encadeamento depende de um produtor de estado obsoleto e de um consumidor que o alcance antes da reinicialização normal, em outra requisição atendida pelo mesmo worker. Erros fatais podem interromper a limpeza; operações de sessão e upload ou diagnósticos iniciais podem participar do caminho. Um novo request HTTP não implica um novo processo nem memória global nova.

02 / Duas requisições, o mesmo workerA requisição B não herda legitimamente os dados da A. O defeito é justamente uma referência interna que sobrevive ao tempo de vida da memória.
  1. 01Requisição A

    Uma operação publica estado interno.

  2. 02Memória liberada

    Uma interrupção deixa a referência global sem limpar.

  3. 03Mesmo worker

    O processo persiste e recebe outra requisição.

  4. 04Requisição B

    Um consumidor inicial usa a referência obsoleta.

Esquema conceitual: as etapas mostram a causa da falha, sem representar um exploit universal.

A mesma falha, caminhos de exposição diferentes

AmbienteO que muda na avaliação
Apache + mod_phpMaior prioridade: o processamento inicial da requisição pode alcançar a falha antes de executar o código da aplicação. Há demonstração de execução remota.
PHP-FPMNão é imune. Há caminhos confirmados associados à aplicação; a reutilização do mesmo worker e o momento da inicialização importam.
Contêineres e outros SAPIsContêiner não corrige o interpretador. Verifique imagem, versão embarcada, extensões e forma de execução; não presuma imunidade pelo nome do servidor.

Como priorizar a exposição real

Comece pelos serviços expostos à internet e pelos ambientes com mod_php. Mapeie também APIs, backoffices, uploads, importadores e produtos de terceiros que embarcam PHP. No FPM, avalie os pools e o fluxo da aplicação; trocar somente o frontend HTTP não remove uma falha do interpretador.

Uma correção distribuída por backport pode manter o número principal antigo. A decisão deve se apoiar no boletim do fornecedor e na revisão instalada, e não apenas em banners HTTP ou comparações textuais de versões. A indicação genérica “PHP 8.2+” é insuficiente: cada série tem um ponto mínimo corrigido.

Defesa em camadas, com a correção no centro

O controle decisivo é aplicar a correção completa do runtime. Enquanto a mudança é preparada, restrinja caminhos expostos e revise limites no proxy e no servidor. Um WAF pode reduzir tráfego conhecido; ele não prova que todos os caminhos de corrupção de memória foram bloqueados.

Medidas como desabilitar session.upload_progress.enabled quando o recurso não é necessário, ou fatal_error_backtraces nos casos aplicáveis do PHP 8.5, atingem caminhos específicos e exigem configuração administrativa e reinício dos workers. Não substituem o patch. Não aplique mudanças genéricas em memory_limit sem avaliar disponibilidade e os limites de recursos do ambiente.

03 / Reduzir exposição → corrigir → comprovarCada camada tem uma função. A mitigação temporária reduz caminhos de entrada; o patch corrige a causa; a validação comprova qual runtime está realmente atendendo.
  1. 01Conter a exposição

    Acesso restrito, limites e observação no perímetro.

  2. 02Corrigir o runtime

    Pacote corrigido e renovação de todos os workers.

  3. 03Validar a operação

    Versão em execução, testes e evidências de implantação.

Esquema conceitual: as etapas mostram a causa da falha, sem representar um exploit universal.

Roteiro de correção verificável

  1. Inventarie o PHP do servidor web, dos pools FPM, dos workers de fila, do cron e das imagens. O php -v do terminal verifica apenas aquele binário CLI.
  2. Confirme a correção no advisory do fornecedor e registre pacote, revisão, origem do repositório e, em contêineres, digest da imagem.
  3. Teste autenticação, uploads, sessões, importações, integrações, extensões e tarefas assíncronas em homologação. Prepare backup restaurável e plano de retorno.
  4. Atualize o pacote ou reconstrua a imagem e substitua todos os processos afetados. Atualização no disco sem renovar workers pode deixar o runtime antigo ativo.
  5. Valide a versão usada pelo tráfego real, os fluxos de negócio e os logs após a troca. Use diagnóstico restrito; não publique phpinfo() para comprovar a versão.
  6. Guarde evidências de implantação e da validação. Um rollback para uma versão vulnerável exige contenção e um novo plano de correção.

O que observar depois da atualização

Correlacione erros fatais, OOM, falhas de workers, avisos de inicialização e comportamento anormal de uploads com os logs do proxy e da aplicação. Esses sinais orientam a investigação, mas isoladamente não demonstram exploração. Da mesma forma, a ausência de mensagens não comprova segurança: algumas falhas ocorrem antes de registrar o erro.

Se houver suspeita de comprometimento, atualizar não encerra a resposta ao incidente. Preserve evidências, contenha o ativo e avalie credenciais, alterações de arquivos e acessos dependentes. A correção deve ser acompanhada da investigação do que aconteceu antes dela.

Fontes e revisão técnica · 22/10/2026

  1. PHP: RCE via OOM corruption
  2. PHP: RCE via stale global state
  3. NVD: CVE-2026-109618
  4. PHP Foundation · Security release, 21 Oct 2026
  5. CERT-EU · Security Advisory 2026-018
  6. PHP · Supported versions