CVE-2026-111497: Brotli2Shell e PHP para Windows explicados

Os patches do php2shell (CVE-2026-109618 e CVE-2026-109619) para o PHP em fim de vida (EOL) já estão disponíveis. Como as respostas do atendimento de vendas estão mais demoradas do que o normal devido à alta demanda, a maneira mais rápida de obter os pacotes corrigidos é adquirir o ELS para Runtimes on-line (abre em uma nova aba). Leia as perguntas frequentes sobre os patches

Vá direto para um resumo gerado por IA desta postagem do blog

  • Resuma esta postagem com o Perplexity
  • Resuma esta postagem com o Gemini

Ainda usa uma versão do PHP que chegou ao fim da vida útil (EOL)? Mantenha-a segura.

A vulnerabilidade CVE-2026-111497 nunca afetou as compilações do Serviço de Suporte de Ciclo de Vida Ilimitado (ELS) da TuxCare para PHP no Windows. E, quando há vulnerabilidades, o ELS fornece patches de segurança retroativos para as versões 5.2 a 8.2 do PHP no Windows, sem forçar uma atualização. Obtenha proteção contínua para as versões das quais suas aplicações já dependem.

Compre ELS por PHP

Principais conclusões

  • O suporte de ciclo de vida ilimitado da TuxCare para o PHP no Windows, das versões 5.2 à 8.2, não é afetado pela vulnerabilidade CVE-2026-111497.
  • Não é necessária nenhuma atualização, pois as compilações da TuxCare não incluem código Brotli e sua libcurl nunca negocia o Brotli.
  • Análises binárias, verificações de recursos da libcurl, testes HTTP em tempo real e um teste de carregamento lateral de DLL confirmaram o resultado.
  • As compilações do php.net para Windows, a partir da versão PHP 8.2.31, já incluem o Brotli e exigem as compilações atualizadas do php.net de 26 de outubro.

A vulnerabilidade CVE-2026-111497 revelou uma falha grave no decodificador Brotli utilizado por várias plataformas de software populares, incluindo algumas compilações do PHP para Windows. O PHP respondeu com pacotes atualizados para Windows em 26 de outubro. No entanto, nem todas as compilações do PHP continham o código vulnerável desde o início.

O Endless Lifecycle Support (ELS) da TuxCare para PHP oferece compilações para Windows que abrangem as versões 5.2 a 8.2, as quais não estão vulneráveis à falha CVE-2026-111497. Essas compilações nunca incluíram suporte ao Brotli; portanto, não há nada a ser corrigido em relação a essa falha específica.

Essa conclusão não se baseou em números de versão nem em suposições sobre dependências. Dois engenheiros da TuxCare examinaram os pacotes de lançamento reais e realizaram quatro testes diferentes para verificar que o Brotli não podia ser carregado nem utilizado.

Veja a seguir o que eles descobriram e como verificar se o Brotli é compatível com o seu ambiente de PHP.

O que a vulnerabilidade CVE-2026-111497 realmente afeta

Publicado em 22 de outubro de 2026, CVE-2026-111497 é um estouro de buffer (uma gravação fora dos limites, para ser mais exato) no decodificador Brotli do Google, c/dec/decode.c, e as versões afetadas são as do Brotli 1.0.3 a 1.0.9, 1.1.0 e 1.2.0. Se um invasor conseguir fazer com que um decodificador vulnerável processe um fluxo Brotli manipulado, o resultado pode ser corrupção de memória, vazamento de memória, uma falha no sistema ou, potencialmente, execução de código.

O Google atribuiu a ela uma pontuação de 9,2 segundo o CVSS 4.0, e já foram divulgadas explorações públicas de prova de conceito. Em 27 de outubro, a CISA a incluiu em seu catálogo de Vulnerabilidades Conhecidas como Exploradas, e as tentativas de exploração relatadas até o momento tiveram como alvo o Node.js. As correções estão disponíveis nas versões 1.0.10, 1.1.1 e 1.2.1 do Brotli.

O Brotli está em toda parte. Navegadores, servidores web, Node.js, .NET e diversos clientes HTTP o utilizam, e é por isso que a vulnerabilidade CVE apareceu em tantos alertas de fornecedores, incluindo os do PHP. Mas uma menção em um alerta do PHP não significa que todos os binários do PHP contenham o decodificador.

Por que algumas compilações do PHP para Windows são afetadas

No PHP, o caminho para o Brotli passa pela extensão cURL, ext/curl. Se a libcurl for compilada com o Brotli e um script ativar a descompressão automática, a libcurl indica br no Accept-Encoding cabeçalho e decodifica tudo o que for recebido. A descompressão automática está desativada por padrão no cURL, mas aplicativos e bibliotecas de clientes HTTP podem ativá-la. Depois disso, basta que um servidor malicioso responda com um fluxo manipulado.

A principal mudança no Windows ocorreu em PHP 8.2.31, quando a compilação upstream começou a vincular o curl ao Brotli (commit do php-src 0c6fc66848, ext/curl/config.w32). A partir dessa versão, os arquivos ZIP oficiais do php.net para Windows são fornecidos brotlidec.dll e brotlicommon.dll. Os pacotes oficiais anteriores, incluindo 8.1.33/8.1.34 e 8.2.29/8.2.30, não oferecem essa proteção. É por isso que o comunicado do projeto PHP abrange apenas as versões da 8.2 à 8.5. Em 26 de outubro, o site php.net disponibilizou pacotes recompilados para Windows (8.2.35-1, 8.3.36-1, 8.4.27-1 e 8.5.12-1) que incluem a versão corrigida do Brotli 1.2.1.

As compilações do ELS da TuxCare estão entre as primeiras a terem sofrido essa mudança. Nossa linha 8.2 é baseada na versão 8.2.29 e nossa linha 8.1, na 8.1.33, enquanto as linhas mais antigas são de anos atrás. Ainda assim, uma comparação básica por si só não foi suficiente para encerrar o caso.

Obtenha suporte ilimitado ao longo do ciclo de vida do PHP → 

Quais versões do ELS para PHP no Windows são afetadas?

Nenhuma delas. Nenhuma versão do ELS para PHP no Windows inclui o Brotli em seus binários nem oferece suporte ao Brotli por meio da libcurl.

ELS para PHP no Windows Brotli em arquivos binários Suporte ao Brotli na libcurl Status do CVE-2026-111497
5.2 Não Não Não vulnerável
5.4 Não Não Não vulnerável
5.6 Não Não Não vulnerável
7.2 Não Não Não vulnerável
7.3 Não Não Não vulnerável
7.4 Não Não Não vulnerável
8.0 Não Não Não vulnerável
8.1 (com base na versão 8.1.33) Não Não Não vulnerável
8.2 (com base na versão 8.2.29) Não Não Não vulnerável

Essa é uma constatação sobre o ambiente de execução do PHP que fornecemos, e não uma afirmação generalizada sobre tudo o que está instalado no servidor.

Como verificamos as versões finais de lançamento

A conclusão de que o sistema “não é vulnerável” só tem valor na medida em que as evidências que a sustentam forem sólidas; por isso, dois de nossos engenheiros analisaram, em paralelo, os artefatos da versão lançada. A ausência de uma DLL não prova que o Brotli não esteja compilado em algum lugar ou que não possa ser carregado de outra forma; por isso, eles realizaram quatro testes.

Fizemos uma busca nos arquivos binários pelo código do Brotli

Cada decodificador Brotli contém um dicionário estático extenso e específico. Analisamos cada .dll e .exe Na versão atual, fiz a compactação em ZIP e não encontrei nenhuma correspondência, em nenhuma compilação. Também não há nenhuma DLL do Brotli incluída em nenhum dos pacotes.

Perguntamos à libcurl quais recursos ela suporta

Em cada compilação, curl_version() não informa sobre o recurso Brotli. A libcurl dentro de php_curl foi compilado sem ele. Isso diz mais do que qualquer pesquisa por nome de arquivo, pois reflete o que o cliente HTTP realmente pode fazer.

Enviamos uma resposta em Brotli mesmo assim

Cenário CURLOPT_ENCODING uma string vazia faz com que o libcurl ofereça todas as codificações que ele suporta. Ele ofereceu deflate, gzip e não br. Em seguida, forçamos uma resposta codificada com Brotli. Nas versões 5.6 a 8.2, a libcurl recusou com o erro 61, “A libcurl suporta as codificações de conteúdo deflate e gzip”. Nas versões 5.2 e 5.4, o corpo foi devolvido sem ter sido decodificado. Os dois grupos se comportam de maneira diferente, mas, em nenhum dos casos, os dados Brotli chegaram a um decodificador.

Nós mesmos colocamos as DLLs

Restava uma dúvida. E se as DLLs do Brotli já estivessem instaladas no computador? O PHP conseguiria reconhecê-las durante a execução?

A verificação de importação indicou que não. Nossa php_curl.dll não importa brotlidec.dll, e nenhum binário se refere a brotlidec ou brotlicommon por nome. Tentamos assim mesmo – confiar apenas em uma tabela de importação parecia fácil demais. Copiamos brotlidec.dll e brotlicommon.dll do pacote oficial php.net 8.2.35-1 para a pasta PHP, o ext pasta e System32, e então repetimos os testes em nossas compilações 8.1 e 8.2. Nada mudou. O Brotli continuava sem ser oferecido, e uma resposta forçada com o Brotli ainda falhava com o erro 61.

Como verificar se o seu provedor de hospedagem PHP oferece suporte ao Brotli

Se você estiver utilizando o Endless Lifecycle Support da TuxCare para PHP no Windows, poderá verificar por conta própria a parte relacionada à libcurl. Execute o seguinte comando com o executável do PHP que você está avaliando:

<?php
$v = curl_version();
echo 'libcurl ', $v['version'], PHP_EOL;

// CURL_VERSION_BROTLI exists on PHP 7.3+; its value is 1 << 23
$brotli = defined('CURL_VERSION_BROTLI') ? CURL_VERSION_BROTLI : (1 << 23);
echo 'Brotli: ', ($v['features'] & $brotli) ? 'YES' : 'no', PHP_EOL;

Em todas as compilações do ELS abordadas aqui, a última linha diz: Brotli: no. No entanto, ele verifica apenas os recursos compilados da libcurl, e não o restante do software instalado na máquina.

Até onde vai o veredicto de “não vulnerável”

Esta conclusão se aplica exclusivamente ao ELS para PHP da TuxCare no Windows, das versões 5.2 à 8.2, e a nada mais. Um módulo de servidor web, o Node.js, o .NET, um navegador ou um curl independente no mesmo servidor podem conter seu próprio Brotli e precisam de uma verificação específica. O Node.js é o primeiro lugar a ser verificado, já que seu Brotli integrado está afetado nas versões 22.x, 24.x e 26.x, com correções nas versões 22.23.4, 24.22.1 e 26.12.1. A extensão Brotli separada para PHP, caso você a tenha instalado, também possui seu próprio decodificador (corrigido na versão 0.21.1). Para qualquer outro caso, atualize as versões afetadas do Brotli para 1.0.10, 1.1.1 ou 1.2.1.

Está executando um pacote do php.net para Windows da versão 8.2.31 ou posterior? Nesse caso, sua compilação inclui o Brotli, e o comunicado do projeto PHP é o que deve ser seguido. A correção consiste na recompilação com o sufixo -1 para o seu branch. Como o código-fonte do PHP não sofreu alterações, o comando `php -v` exibe o mesmo número de versão antes e depois; apenas a data de compilação muda (a versão 8.2.35 informa “compilado em: 20 de outubro de 2026”, enquanto a 8.2.35-1 informa “compilado em: 26 de outubro de 2026”). A verificação direta é feita por meio de `curl_version()`['brotli_version']: o pacote 8.2.35 original retorna `brotli/1.2.0`, enquanto a recompilação 8.2.35-1 retorna `brotli/1.2.1`.

Por que é importante provar uma negação

A maior parte do trabalho de segurança em um ambiente de execução em fim de vida útil consiste em identificar as vulnerabilidades que se aplicam e corrigi-las. A outra parte é comprovar quais não se aplicam, para que sua equipe não desperdice um período de manutenção com um problema inexistente nem deixe um scanner detectando vulnerabilidades indefinidamente.

No caso do CVE-2026-111497, todos os quatro testes apontam para o mesmo resultado; portanto, as equipes responsáveis por essas compilações podem documentar a conclusão de que não há vulnerabilidade e encerrar o caso. Você pode consultar esse e outros CVEs nos produtos da TuxCare no TuxCare CVE Tracker.

Tem dúvidas sobre o ELS para PHP no Windows? Entre em contato com um de nossos especialistas em correções de segurança para PHP.

Obtenha suporte ilimitado ao longo do ciclo de vida do PHP → 

Perguntas frequentes

Será que php -v Como posso verificar se o meu PHP no Windows já tem a correção do Brotli?

Não diretamente. O site php.netAs compilações para Windows de 26 de outubro atualizaram o Brotli sem alterar o código-fonte do PHP; portanto, um pacote 8.2.35-1 corrigido ainda informa a versão 8.2.35. Apenas a data de compilação muda, de 20 de outubro para 26 de outubro de 2026. Para obter uma resposta direta, execute php -r “echo curl_version()[‘brotli_version’];”. brotli/1.2.1 significa que o decodificador foi corrigido; brotli/1.2.0 significa que você ainda precisa da recompilação.

A vulnerabilidade CVE-2026-111497 está sendo explorada?

Sim. A CISA incluiu essa vulnerabilidade no catálogo de “Vulnerabilidades Exploradas Conhecidas” em 27 de outubro, e, desde então, fornecedores de segurança têm relatado tentativas de exploração contra o Node.js. Isso não significa que o PHP para Windows esteja sendo explorado, e as compilações do ELS para PHP da TuxCare no Windows não contêm, de forma alguma, o decodificador vulnerável.

Os clientes do TuxCare ELS para PHP no Windows precisam fazer alguma coisa?

Não se aplica a esta CVE. As compilações abordadas aqui, das versões 5.2 à 8.2, não precisam de atualização; portanto, você pode registrar a conclusão de que não há vulnerabilidade e encerrar o ticket do scanner.

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.

Índice
Obtenha as respostas sobre segurança de código aberto de que você precisa

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.