Foi identificada uma vulnerabilidade na biblioteca de referência do decodificador do formato de compressão de dados Brotli (CVE-2026-111497, nomes de código Broccoli2Shell e HTTP2Shell), que pode levar a um estouro de buffer ao processar dados comprimidos especificamente formatados. De acordo com o Google, a vulnerabilidade pode ser explorada para execução remota de código em ataques a projetos que utilizam a implementação oficial do decodificador Brotli. Entre os projetos afetados estão: Node.js, Bun, Envoy, Istio, navegadores da web, servidores proxy, clientes HTTP, servidores HTTP, compactadores, firmwares UEFI, visualizadores JPEG XL, bibliotecas de decodificação de conteúdo para Python, Ruby, Java, PHP e .NET, e suas dependências relacionadas.
O problema foi descoberto pela OpenAI em fevereiro deste ano e foi mitigado na base de código do Brotli por meio da rejeição de fluxos incorretos durante a decodificação. Em 22 de outubro, foram lançadas as versões corretivas Brotli 1.0.10, 1.1.1 e 1.2.1, em que foi declarado explicitamente que a vulnerabilidade foi corrigida e a essência do problema foi resolvida. No mesmo dia, um protótipo de exploit foi criado, permitindo a execução remota de código em condições laboratoriais, ao usar compilações não padronizadas (em compilações padrão, ocorria falha). Posteriormente, a Imperva registrou um ataque em compilações padrão do Node.js 24.22.0 em um ambiente Linux no sistema ARM64.
A vulnerabilidade resulta em gravação fora do buffer devido ao tratamento incorreto de erros no processo de análise de blocos no fluxo comprimido. A função DecodeBlockTypeAndLength() retornava, em vez de um código de erro, apenas os valores true e false, o que impedia o código chamador de distinguir uma corrupção de fluxo de um estado que requer a passagem de dados adicionais para a função. Se um tipo de bloco de dados comprimidos incorreto fosse indicado no fluxo, o decodificador não o percebia como um erro, mas como um estado de falta de dados que exigia leitura adicional do fluxo. No entanto, como o buffer alocado não estava dimensionado para os dados lidos adicionalmente, esses dados eram gravados em uma área além de seus limites, onde o estado interno do decodificador era mantido.
Projetos vulneráveis:
- A biblioteca de referência do brotli apresenta o problema a partir da versão 1.0.3 e foi corrigida nas atualizações 1.0.10, 1.1.1 e 1.2.1. A vulnerabilidade afeta aplicativos e bibliotecas que utilizam a biblioteca libbrotlidec.
- A plataforma JavaScript Node.js corrigiu o problema nas atualizações 26.12.1, 24.22.1 e 22.23.4. Aplicações que utilizam o método fetch() para solicitar conteúdo de terceiros podem ser atacadas, pois este método decodifica automaticamente respostas HTTP com o cabeçalho 'Content-Encoding: br'. A vulnerabilidade também se manifesta ao chamar diretamente os métodos zlib.brotliDecompress*(), createBrotliDecompress() e brotli.decompress() para descompactar conteúdo externo ou ao receber solicitações HTTP analisadas por meio das bibliotecas Express 5 e body-parser 2.x.
- Pacotes Python brotli e brotlicffi (correção proposta na versão 1.2.1) e projetos que os utilizam, incluindo bibliotecas populares como urllib3, aiohttp, httpx e Scrapy, que decodificam respostas com o cabeçalho 'Content-Encoding: br' ao acessar recursos da web externos.
- Servidores HTTP, proxies HTTP, clientes HTTP e navegadores da web que suportam a compressão Brotli ('Accept-Encoding: br'). No Apache httpd, o mod_brotli é fornecido (desativado por padrão). Para nginx, um módulo de terceiros ngx_brotli está disponível (a versão do brotli nas dependências foi atualizada para a mais recente). No Chrome/Chromium e Firefox, o problema já foi corrigido em uma das atualizações anteriores. No proxy-servidor A vulnerabilidade do Envoy foi corrigida nas versões 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime ao usar métodos BrotliDecoder, BrotliStream e HttpClient. A vulnerabilidade ainda não foi corrigida.
- Extensão PHP brotli ao usar a função brotli_uncompress(). A correção está em andamento.
- Pacote Ruby brotli ao usar o método Brotli.inflate. A vulnerabilidade ainda não foi corrigida.
- SGBD DuckDB ao importar arquivos Parquet comprimidos. A correção está em andamento.
- SGBD ClickHouse. A correção está em andamento.
- SGBD YDB. A vulnerabilidade ainda não foi corrigida.
- Apache Arrow ao importar arquivos Parquet comprimidos. A correção está em andamento.
- libjxl (a compressão de metadados em JPEG XL utiliza Brotli).
Correção em andamento. - Compactadores NanaZip, 7-Zip-zstd e p7zip ao descompactar arquivos br. A vulnerabilidade ainda não foi corrigida.
- MuPDF. A vulnerabilidade ainda não foi corrigida.
- Firmware UEFI baseado em EDK II e UEFITool, comprimidos com Brotli. A correção está em andamento — EDK II e UEFITool.
- A plataforma JavaScript Bun. A vulnerabilidade foi corrigida na versão 1.4.4.
- Plataforma de gerenciamento de microsserviços Istio. A vulnerabilidade foi corrigida nas versões 1.29.9, 1.30.6 e 1.31.2.
- curl e libcurl, a vulnerabilidade se manifesta quando há uma versão vulnerável do libbrotlidec como dependência.
- Analisadores do formato de fontes Web Open Font (WOFF), que utiliza
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost e YTsaurus. A vulnerabilidade foi corrigida em uma das atualizações.
Fonte: opennet.ru
