Pular para o conteúdo

HTTP2Shell: falha do Brotli atinge Python, Bun e Envoy

A CVE-2026-111497, falha no decodificador Brotli agora chamada de HTTP2Shell, tem nota 9,2 e atinge os stacks de requests e httpx do Python, além de Bun, Envoy e Istio.

Por Tech AI Wire Team

4 min de leitura

XLinkedIn
Um notebook prateado fechado sobre uma mesa de madeira, com adesivos dos logotipos de Node.js, Python e Bun na tampa, ao lado de um teclado preto, uma planta e uma caneca de café.

Em números

CVSS v4.0 score, rated critical
9.2
Brotli versions with the bug
1.0.3-1.2.0
monthly downloads of Python's Brotli package
82.8M

Um bug de memória no descompressor Brotli do Google agora tem um nome mais chamativo e um alcance maior. Corrigida primeiro no Node.js em 21 de outubro de 2026 como “Node2Shell”, a CVE-2026-111497 é chamada de “HTTP2Shell” desde o fim do dia 23 de outubro (UTC). O novo nome mostra até onde ela se espalha: bibliotecas HTTP do Python, o runtime Bun e os proxies Envoy e Istio trazem código afetado.

A empresa de segurança Aikido dá a ela nota 9,2 de 10 (crítica) no CVSS v4.0, a escala padrão de gravidade. O Brotli é um formato de compressão que servidores web e navegadores usam para reduzir dados. Qualquer programa que descompacte dados Brotli vindos de um desconhecido pode estar exposto.

Um bug, dois nomes

O HTTP2Shell não é uma segunda falha. “É uma única CVE, não uma segunda falha”, escreve em seu rastreador a Brandefense, empresa de inteligência de ameaças. É o mesmo bug do decodificador Brotli com um novo rótulo.

O Tech AI Wire cobriu a primeira rodada de correções na atualização de segurança de outubro do Node.js. O que mudou desde então foi a lista de projetos afetados.

Como o bug funciona

A falha está nas versões 1.0.3 a 1.2.0 do Brotli. O aviso do Node.js explica o problema. Um “block switch” inválido em um fluxo comprimido era tratado como uma necessidade temporária de mais entrada, em vez de um erro de formato. O decodificador então continuava escrevendo em um buffer interno de oito bytes, além do seu fim.

Escrever além de um buffer pode travar um programa, vazar memória ou, no pior caso, permitir que um invasor execute código. As próprias notas de versão do Brotli dizem que a “gravação fora dos limites permite a execução remota de código”.

O aviso do Node.js credita o relato ao OpenAI Codex Security, a ferramenta automatizada de revisão de código da OpenAI. Segundo a Aikido, a OpenAI descobriu que o bug funciona nas duas direções. Um cliente malicioso pode atacar um servidor sem patch, e um servidor malicioso pode atacar um cliente sem patch.

A Aikido acrescenta que a causa raiz foi corrigida no código-fonte do Brotli em fevereiro. Ninguém a marcou como correção de segurança, então nenhuma versão a incluiu até 21 de outubro.

Por que apps em Python estão expostos

Muitos apps em Python usam o Brotli sem nunca importá-lo. Segundo a Aikido, urllib3 e requests, httpx, aiohttp e Scrapy usam o Brotli automaticamente quando ele está instalado. O pacote Brotli do Python é baixado 82,8 milhões de vezes por mês.

Há um segundo problema. Em 23 de outubro, o registro da CVE, o banco de dados OSV e o banco de alertas do GitHub não ligavam a CVE a nenhum dos dois pacotes Python, informa a Aikido. Assim, pip-audit, Dependabot e Safety não apontariam uma versão vulnerável.

Versões corrigidas

ProjetoCorrigido em
Google Brotli (biblioteca em C)1.0.10, 1.1.1, 1.2.1
Brotli no PyPI1.2.1
brotlicffi no PyPI1.2.1.0
Node.js22.23.4, 24.22.1, 26.12.1
Bun1.4.4
Envoy1.40.0, 1.39.3, 1.38.6, 1.37.8
Istio1.29.9, 1.30.6, 1.31.2

Algumas versões não recebem correção. Node.js 20.x, 25.x e 18.x já passaram do fim da vida útil, e a Brandefense cita a Vercel dizendo que o Node 20 “não receberá esta correção”. A Brandefense também lista os pacotes Brotli mais novos do Debian ainda sem versão corrigida. Segundo a Aikido, o mod_brotli do Apache e o Nginx não decodificam Brotli por padrão.

Está sendo explorada?

Nenhum ataque real havia sido relatado até as 22h00 UTC de 23 de outubro, segundo a Brandefense. A falha não está na lista de vulnerabilidades sabidamente exploradas da CISA.

O quanto ela é grave na prática ainda está em disputa. O pesquisador Ron Masas diz que sua equipe reproduziu a execução remota de código sem login. A Brandefense observa que o código de prova de conceito publicado produz principalmente travamentos, e uma análise argumenta que só é possível uma negação de serviço.

O que isso significa para desenvolvedores

Aplique o patch primeiro e depois confira seus arquivos de lock à mão. Como os scanners podem não apontar os pacotes Python, procure Brotli e brotlicffi nas suas listas de dependências e atualize para 1.2.1 ou 1.2.1.0.

Não presuma que só o servidor é alvo. Se o seu código busca dados de servidores externos com requests, httpx ou aiohttp, um servidor hostil pode enviar o fluxo malicioso. A Aikido alerta que “mudar só o Accept-Encoding é insuficiente”, porque esse cabeçalho apenas pede ao servidor que não comprima.

No Node.js, verifique o que o seu framework decodifica. Pela leitura da Brandefense, o Express 5 decodifica por padrão corpos de requisição em Brotli, e o Express 4 não. Masas resumiu o risco sem rodeios: “app.use(express.json()) é suficiente.”

Se você roda Envoy ou Istio como service mesh, atualize também os proxies. Tudo o que embute sua própria cópia do Brotli precisa ser recompilado, não basta atualizar o sistema. Onde ainda não há patch, a Aikido recomenda desativar a decodificação Brotli.

No início desta semana, outra falha do PHP, o PHP2Shell, sofreu tentativas de ataque antes da sua divulgação. Trate esta com a mesma rapidez.

Fontes

  1. Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected - Aikido Security
  2. Node2Shell: Fixed Node.js Versions and Check - Brandefense
  3. Wednesday, October 21, 2026 Security Releases - Node.js
  4. google/brotli releases - GitHub (google/brotli)

Artigos relacionados