Brotli: falha crítica atinge Node.js, Python, .NET e mais
Uma falha de gravação fora dos limites (CVSS 9.2) no decodificador Brotli atinge não só o Node.js, mas também Python, .NET, Ruby, PHP, curl e o Git for Windows — qualquer software que empacote a biblioteca Brotli do Google para descomprimir conteúdo com Accept-Encoding: br. A Imperva já reportou execução remota de código contra uma aplicação Express 5 rodando Node.js 24.22.0, embora o exploit não tenha sido publicado.
O que aconteceu
A CVE-2026-111497 foi corrigida pelo Node.js em 21 de outubro de 2026, nas versões 22.23.4, 24.22.1 e 26.12.1. O problema está no decodificador: ao receber um bloco inválido, ele trata a falha como “preciso de mais dados” em vez de erro de formato, e continua anexando bytes a um buffer interno de apenas 8 bytes — o que corrompe memória do processo e pode causar queda do serviço, vazamento de memória ou execução de código, dependendo do contexto. A falha foi reportada pela OpenAI Codex Security, Khai Tran e Sylvie Mayer.
Quem é afetado
Como o bug está na biblioteca C original do Brotli, ele se propagou para qualquer binding que a reaproveita:
- Node.js 22.x antes de 22.23.4, 24.x antes de 24.22.1 e 26.x antes de 26.12.1 — linhas fora de suporte (como 18.x e 20.x) são afetadas e não recebem correção.
- Python — pacotes
Brotliebrotlicffiantes de 1.2.1 e 1.2.1.0, usados por urllib3, requests, httpx e aiohttp para decodificar respostasbr. - .NET — corrigido em 8.0.33, 9.0.22 e 10.0.14.
- Ruby (gem
brotli0.9.1), PHP (extensãobrotli0.21.1) e mitmproxy (12.3.1) já têm correção. - curl compilado com suporte a Brotli e usado com
--compressed. - Git for Windows, que embute libcurl: a versão 2.56.0.windows.3 ainda trazia o Brotli 1.2.0 vulnerável; a correção só chegou na 2.56.0.windows.4, lançada em 26 de outubro.
- DuckDB, ClickHouse e Apache Arrow seguiam sem versão corrigida nos últimos levantamentos — se o seu pipeline de dados ingere Brotli de fonte externa, trate como ainda vulnerável.
Como se proteger agora
- Levante o que no seu ambiente empacota Brotli — não é só “atualizar o Node”: inclui runtime .NET, ambientes Python (confira com
pip-audit), gems Ruby, extensões PHP e a versão do Git for Windows nas estações. - Atualize o Node.js para 22.23.4, 24.22.1 ou 26.12.1 — prioridade máxima em qualquer servidor Express/Node exposto à internet, já que é onde a Imperva demonstrou RCE.
- Atualize Python (
Brotli/brotlicffi≥ 1.2.1), .NET, Ruby, PHP, mitmproxy e o Git for Windows (≥ 2.56.0.windows.4) nos respectivos gerenciadores de pacote. - Se não puder atualizar um serviço de borda agora, rejeite ou reescreva o cabeçalho
Accept-Encodingpara removerbrno proxy/WAF até aplicar o patch. - Para DuckDB, ClickHouse, Apache Arrow e qualquer pipeline que decodifique Brotli de origem não confiável, isole a ingestão ou desative a descompressão automática até o fornecedor liberar correção.
Perguntas frequentes
Já existe exploração confirmada em produção?
Não publicamente. A Imperva relatou RCE contra uma aplicação de teste Express 5 após várias tentativas, sem publicar o exploit, e não há registro de ataques in-the-wild até o momento.
A falha já está no catálogo KEV da CISA?
Não. Diferente do PHP2Shell (CVE-2026-109618 e CVE-2026-109619), que teve prazo federal até 29/10, a CVE-2026-111497 ainda não entrou no catálogo de vulnerabilidades exploradas da CISA — mas o CVSS 9.2 da Google e a cadeia de dependências afetadas justificam tratar como urgente.
Minha aplicação precisa estar exposta à internet para ser afetada?
Não necessariamente. Qualquer processo que decodifique Brotli vindo de uma fonte não confiável — uma resposta HTTP, um arquivo, uma mensagem de fila — está em risco, mesmo sem servir tráfego público.
Atualizar o Node.js corrige todas as dependências que usam Brotli?
Não. O Node.js embute sua própria cópia; bibliotecas Python, gems Ruby, extensões PHP e o runtime .NET carregam cópias separadas e precisam de atualização própria.
Conclusão
A CVE-2026-111497 não é um problema isolado do Node.js — é uma falha na biblioteca Brotli que se multiplicou por todo o ecossistema que a reaproveita. Trate como um levantamento de inventário, não como um único patch: cheque Node.js, Python, .NET, Ruby, PHP, curl e Git for Windows nesta ordem de exposição, e mantenha o Accept-Encoding: br fora de serviços que não puderem atualizar ainda hoje.