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.
4 min de leitura

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
| Projeto | Corrigido em |
|---|---|
| Google Brotli (biblioteca em C) | 1.0.10, 1.1.1, 1.2.1 |
| Brotli no PyPI | 1.2.1 |
| brotlicffi no PyPI | 1.2.1.0 |
| Node.js | 22.23.4, 24.22.1, 26.12.1 |
| Bun | 1.4.4 |
| Envoy | 1.40.0, 1.39.3, 1.38.6, 1.37.8 |
| Istio | 1.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
- Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected - Aikido Security
- Node2Shell: Fixed Node.js Versions and Check - Brandefense
- Wednesday, October 21, 2026 Security Releases - Node.js
- google/brotli releases - GitHub (google/brotli)
Artigos relacionados

Python 3.15.1, 3.14.9 e 3.13.17 trazem o pip 26.2.2
Python 3.15.1, 3.14.9 e 3.13.17 saíram em 21 de outubro de 2026. Eles trazem o pip 26.2.2 e o certifi 2026.10.19 para deixar de confiar na autoridade eMudhra.

Rejetto HFS CVE-2026-61500 é explorada um dia após a publicação de sua análise
HFS 3.0.0 a 3.2.0 assina logins com Math.random(), uma falha que o Mythos da Anthropic encontrou. Os ataques começaram em 3 de outubro, um dia após a análise. A 3.2.1 corrige o problema.

Python 3.10 chega ao fim da vida útil e cinco versões corrigem 8 CVEs
O Python 3.10.22 é o último lançamento da linha 3.10: o branch chegou ao fim da vida útil em 1º de outubro de 2026, enquanto 3.11 a 3.14 recebiam correções para até oito CVEs.