Detalhes sobre vulnerabilidades críticas no PHP foram revelados e correções foram publicadas

Foram lançadas correções para PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35, além de patches para versões já não suportadas do PHP 7.4, PHP 8.0 e PHP 8.1 (versões vulneráveis de 5.4 a 7.3 permanecem sem patches), que corrigem duas vulnerabilidades críticas:

  • CVE-2026-109618 — execução remota de código, causada pelo fato de que, quando a memória livre disponível para o processo se esgota, o manipulador de falta de memória através da execução da função longjmp() pode interromper o interpretador PHP em um estado onde apenas parte das estruturas internas relacionadas ao processamento da solicitação foi inicializada. Posteriormente, a função de finalização do processamento da solicitação tenta acessar essas estruturas como se já estivessem inicializadas, embora a memória para elas não tenha sido alocada.

    O principal vetor de ataque é a manipulação de solicitações multipart para criar condições que esgotem a memória disponível para o processo. Para contornar o limite post_max_size, pode-se não especificar o cabeçalho Content-Length e enviar um grande número de cabeçalhos HTTP. É possível realizar também ataques pontuais em operações específicas em aplicativos PHP que consomem excessivamente memória. A presença de um exploit foi confirmada para mod_php, pois ele chama a função shutdown() mesmo em caso de falha. O PHP-FPM encerrará o processo filho em caso de falha, o que dificulta a realização do ataque, mas teoricamente não o exclui.

  • CVE-2026-109619 — execução remota de código, causada pelo acesso à memória após a liberação devido à limpeza inadequada do estado global vinculado a uma solicitação específica. Se a solicitação for interrompida devido a um erro fatal, timeout ou falta de memória, o estado global pode não ser redefinido e os ponteiros permanecerão ativos, apesar da liberação da memória a que se referem. Durante o processamento da próxima solicitação no mesmo processo, pode ocorrer o acesso por meio do ponteiro restante ao antigo estado global.

    Para a exploração, podem ser criadas condições para o esgotamento da memória disponível ao processar uma solicitação multipart no código para indicar o progresso do upload (session.upload_progress). Aqui, o principal e confirmado vetor de ataque mencionado é o manipulador fatal_error_backtraces no PHP 8.5, que não reinicia o estado da rastreabilidade ao ser concluído. No primeiro caso, o ataque é possível no mod_php e PHP-FPM, enquanto no segundo apenas no mod_php. Também é mencionada uma possibilidade não confirmada de ataque em configurações que têm diretivas que resultam na exibição de avisos em uma fase inicial do processamento da solicitação (por exemplo, avisos sobre o uso de parâmetros obsoletos).

Foi declarado que o bloqueio total das vulnerabilidades só é possível através da instalação de atualizações. As seguintes medidas ajudam a reduzir a probabilidade de ataques bem-sucedidos, mas não tornam o sistema totalmente seguro:

  • Definindo no php.ini o parâmetro "memory_limit=-1", o que dificulta o controle do esgotamento dos limites de memória por um atacante.
  • Definindo o parâmetro "post_max_size = 8M", se não houver necessidade de carregar arquivos grandes. O valor do parâmetro "upload_max_filesize" deve ser menor que o parâmetro "post_max_size".
  • Definindo um limite para o consumo de memória a nível de sistema, através de cgroup memory.max ou parâmetros de consumo de memória do contêiner, mas não através dos limites de sistema RLIMIT_AS e RLIMIT_DATA, que apenas provocam a chamada problemática longjmp().
  • Se o desempenho não for importante, pode-se limitar o número de solicitações processadas por um único processo de trabalho através de pm.max_requests=1 no PHP-FPM e MaxRequestsPerChild no Apache httpd.
  • Definindo a nível de php.ini ou configuração servidor (não através de ini_set() ou FPM .user.ini, pois o parâmetro deve ter efeito antes do início do processamento da solicitação) o parâmetro "session.upload_progress.enabled=0.
  • Ao usar a versão PHP 8.5, deve-se definir o parâmetro "fatal_error_backtraces=0."
  • Remover configurações obsoletas ou erradas (como assert.* e caminhos incorretos em open_basedir) associadas a solicitações individuais, que resultam na exibição de mensagens de diagnóstico antes da inicialização.
  • Eliminar situações no código PHP que levam a atingir timeouts e erros fatais, por exemplo, relacionadas a falhas em manipuladores de callback e no processamento de uploads.
  • Para bloquear a primeira vulnerabilidade no código de versões antigas do PHP, pode-se substituir a chamada longjmp() no manipulador de esgotamento de memória livre por _exit().
  • Além disso, é possível reduzir o valor do parâmetro max_input_nesting_level no php.ini e bloquear solicitações multipart, conforme demonstrado no anúncio preliminar.

O status da correção de vulnerabilidades em distribuições pode ser avaliado nas seguintes páginas: Debian, Ubuntu, SUSE, RHEL, Gentoo, Arch,
Fedora, FreeBSD.

Adicional 1: Vulnerabilidades foram identificadas com a ajuda de modelos de IA GPT-5.6 e Gemini 4 Argon. A OpenAI publicou a ferramenta php2shell-checker para verificar a suscetibilidade a vulnerabilidades de sites e arquivos executáveis locais, mas esta ferramenta apenas verifica o número da versão do PHP retornado pelo servidor HTTP ou pelo comando ‘php -v’, sem uma análise detalhada.

Adicional 2: O autor do protótipo do exploit, que utiliza a vulnerabilidade causada pela liberação dupla de memória (double-free), informou que o problema permanece não corrigido na versão PHP 8.5.12 e o exploit continua funcionando. Anteriormente, representantes do PHP afirmaram que essa vulnerabilidade não estava relacionada às correções previstas e não era um problema real. No entanto, o autor do exploit alegou que se tratava de uma vulnerabilidade completamente diferente.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster