Guias de Segurança

Vulnerabilidade do Brotli CVE-2026-111497 (Node2Shell): como verificar Node.js, Python e .NET, e o que atualizar

CVE-2026-111497 é uma escrita fora dos limites no decodificador Brotli: dados comprimidos manipulados podem corromper a memória. Afeta o Brotli 1.0.3–1.0.9, 1.1.0 e 1.2.0, embutido no Node.js, Bun, pacotes Brotli do Python, .NET e outros. Como verificar e as versões corrigidas.

Publicado 2026-10-27 Atualizado 2026-10-27 Última verificação 2026-10-27 14 min de leitura
Nesta página

Para quem é este artigo: desenvolvedores e operadores que rodam serviços web, APIs, crawlers ou jobs em lote com Node.js, Bun, Python ou .NET. Este artigo se baseia em informações públicas do projeto Brotli do Google, do Node.js, da Microsoft, do PyPI, do JPCERT/CC e de fontes do governo dos EUA. Ele não trata de etapas de ataque nem de código de exploit.

Em andamento: esta página será atualizada conforme novas informações forem publicadas

Às 23:00 UTC de 26 de outubro de 2026

Ainda não se sabe

  • Se está sendo explorada (nenhuma fonte primária relata)
  • A avaliação própria do NVD (aguardando análise)
  • A lista completa de produtos afetados
  • Algumas distribuições Linux (versões mais antigas ainda não avaliadas)

O Google publicou as correções em 21 de outubro (horário dos EUA), o Node.js no mesmo dia e a Microsoft em 25 de outubro (horário dos EUA). O JPCERT/CC emitiu um alerta em 26 de outubro. O catálogo KEV da CISA não lista a falha. Mais fornecedores ainda estão lançando correções, então esta página será atualizada conforme eles publicarem.

O que fazer hoje

1

Verifique se você descomprime dados Brotli vindos de fora

Exemplos são um servidor web que descomprime requisições enviadas com Content-Encoding: br, um cliente HTTP que descomprime automaticamente respostas de sites externos e código que descomprime arquivos enviados por usuários. Se algum desses casos se aplica, trate como urgente (visão deste site).

2

Verifique as versões dos seus runtimes e pacotes

Use os comandos de "Como verificar se você é afetado", mais abaixo, para verificar o Node.js, o Bun, os pacotes do Python e o runtime e o SDK do .NET.

3

Atualize para uma versão corrigida

Atualize pelo menos para as versões de "Versões corrigidas", mais abaixo. As builds oficiais do nodejs.org do Node.js 20.x e anteriores estão fora de suporte e não recebem correção, então migre para 22.x ou posterior. Para o Node.js instalado a partir de pacotes do Ubuntu ou do Debian, siga o aviso de segurança da distribuição.

4

Reconstrua, reimplante e reinicie

Reconstrua com as versões corrigidas as imagens de contêiner, os executáveis gerados com bun build --compile e os apps .NET autocontidos ou NativeAOT, e reimplante-os. Reinicie também os processos em execução: um processo antigo mantém a biblioteca antiga carregada.

5

Procure sinais de comprometimento

O JPCERT/CC pede aos usuários que, além de aplicar as correções, verifiquem se houve comprometimento. Procure aumento de travamentos, processos filhos desconhecidos ou conexões de saída nos processos que descomprimem dados vindos de fora (sugestão deste site).

6

Corrija as versões fixadas em lockfiles e imagens base

Se package-lock.json, requirements.txt, poetry.lock ou a linha FROM de um Dockerfile fixa uma versão antiga, o próximo build vai trazê-la de volta. Altere as versões fixadas para versões corrigidas.

Versões corrigidas

9,2
CVSS v4.0 (nota do Google)
1.0.3–1.0.9, 1.1.0, 1.2.0
Versões do Brotli afetadas
Não listada
KEV da CISA (manhã de 27/10, horário do Japão)
Nenhum relato
Exploração (fontes primárias)
O que você usaAfetadoCorrigido emFonte
Brotli (biblioteca C)1.0.3–1.0.9, 1.1.0, 1.2.01.0.10, 1.1.1, 1.2.1Google
Node.js 22.xanterior a 22.23.422.23.4Node.js
Node.js 24.xanterior a 24.22.124.22.1Node.js
Node.js 26.xanterior a 26.12.126.12.1Node.js
Node.js 20.x e anteriores (builds oficiais do nodejs.org)fim de suportenenhuma (migre para 22.x ou posterior)Node.js
Bunde 1.0.21 até antes de 1.4.41.4.4Bun
brotli do PyPIde 1.0.3 até antes de 1.2.11.2.1GitHub Advisory Database
brotlicffi do PyPIde 1.0.3 até antes de 1.2.1.01.2.1.0GitHub Advisory Database
.NET 8anterior a 8.0.33runtime 8.0.33 (SDK 8.0.133, 8.0.427)Microsoft
.NET 9anterior a 9.0.22runtime 9.0.22 (SDK 9.0.123, 9.0.320)Microsoft
.NET 10anterior a 10.0.14runtime 10.0.14 (SDK 10.0.114, 10.0.403)Microsoft
Envoyv1.39.2, v1.38.5, v1.37.7, v1.36.11v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12Envoy
Builds do PHP para Windows8.5.12, 8.4.27, 8.3.36, 8.2.35 antes da recompilação8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1PHP

O .NET Framework não é afetado (Microsoft). Também há correção para as versões prévias do .NET 11 (11.0.0-rc.3.26522.148). Segundo o Envoy, só são afetadas as implantações que têm o descompressor Brotli configurado.

Distribuições Linux costumam aplicar a correção por backport sem alterar o número da versão original. Por exemplo, o brotli do Ubuntu 22.04 é corrigido em "1.0.9-2ubuntu0.1", que ainda diz 1.0.9. Para pacotes do sistema operacional, guie-se pelo aviso de segurança da sua distribuição, não apenas pelo número da versão.

Segundo a equipe do PHP, as builds do PHP para Windows ficam expostas pela extensão cURL quando a descompressão automática de respostas HTTP está habilitada (ela vem desativada por padrão no cURL, mas aplicações e bibliotecas de cliente HTTP podem ativá-la). As builds corrigidas têm o sufixo "-1"; a versão do PHP em si não muda.

Biblioteca do sistema operacional (libbrotli)

Corrigida pelas atualizações do sistema. Reinicie os processos que a usam

Embutida em um runtime (Node.js, Bun, .NET)

Atualize o próprio runtime

Pacotes de linguagem (brotli, brotlicffi)

Atualize em cada ambiente virtual

O que você gerou (contêineres, executáveis)

Reconstrua com versões corrigidas e reimplante

Cada lugar onde existe uma cópia do Brotli precisa da própria correção. Uma atualização do sistema operacional só corrige a biblioteca do sistema.

Como verificar se você é afetado

Estes comandos apenas verificam versões nos seus próprios sistemas.

1

Node.js

Execute node -v. Versões anteriores a 22.23.4, 24.22.1 ou 26.12.1 são afetadas. node -p process.versions.brotli mostra a versão do Brotli embutida, mas, dependendo de como a correção é aplicada, esse número pode não mudar, então decida pela versão do Node.js em si (visão deste site). No Docker, verifique dentro da imagem, por exemplo com docker run --rm --entrypoint node <image> -v. O Node.js instalado a partir de pacotes do Ubuntu ou do Debian usa a libbrotli do sistema, então verifique-o como descrito em "Bibliotecas do sistema operacional", mais abaixo.

2

Bun

Execute bun --version. Versões anteriores a 1.4.4 são afetadas. Executáveis gerados com bun build --compile incluem o Bun com que foram gerados e continuam afetados até serem reconstruídos (aviso do Bun).

3

Python

Execute pip show brotli brotlicffi (ou procure Brotli e brotlicffi em python -m pip list). São afetados o brotli anterior a 1.2.1 e o brotlicffi anterior a 1.2.1.0. Se nenhum dos dois estiver instalado, não há pacote do Python a corrigir para esta falha. Cada ambiente virtual e cada contêiner tem a própria cópia, então verifique cada um. Se ele veio de um pacote do sistema operacional como python3-brotli, guie-se pelo aviso de segurança da sua distribuição, não pelo número da versão.

4

.NET

Execute dotnet --list-runtimes e dotnet --list-sdks. A Microsoft diz que você está exposto se habilitou o Brotli na descompressão de requisições do ASP.NET Core ou na descompressão automática de respostas do HttpClient, ou se chama BrotliStream ou BrotliDecoder diretamente. Nenhuma das duas opções automáticas vem ativada por padrão.

5

Bibliotecas do sistema operacional

Verifique a versão instalada com dpkg -l 'libbrotli*' no Debian e no Ubuntu, rpm -qa 'brotli*' 'libbrotli*' em sistemas baseados em RHEL ou apk list --installed 'brotli*' no Alpine, e compare com o aviso de segurança da sua distribuição. O Debian corrigiu o Debian 12 em 1.0.9-2+deb12u1 (DLA-4855-1) e o Debian 13 em 1.1.0-2+deb13u1 (DSA-6582-1).

O que foi divulgado

Escrita fora dos limites no decodificador Brotli (CVE-2026-111497)
CVE
CVE-2026-111497 (aviso do GitHub GHSA-9v8h-qqgm-4m35)
Tipo
Escrita fora dos limites (CWE-787) e valor de retorno não verificado (CWE-252) no decodificador Brotli (c/dec/decode.c)
Gravidade
CVSS v4.0 9,2 (Google). Vetor de ataque de rede, sem autenticação, sem interação do usuário, com requisitos de ataque (AT:P). A Microsoft dá nota 8,1 no CVSS v3.1 ao problema no .NET
Impacto
Descomprimir um fluxo Brotli manipulado pode corromper a memória adjacente, expor conteúdo da memória, causar negação de serviço ou, potencialmente, permitir a execução de código arbitrário (descrição do Google no NVD). Para o .NET, a Microsoft diz que pode levar a divulgação de informações, negação de serviço ou elevação de privilégio (não menciona execução de código)
Afetado
Brotli 1.0.3–1.0.9, 1.1.0 e 1.2.0, e produtos que o embutem
Corrigido
Brotli 1.0.10, 1.1.1, 1.2.1 (21 de outubro de 2026, horário dos EUA)
Contorno
O Google não oferece nenhum (JPCERT/CC). A Microsoft diz para evitar descomprimir dados Brotli controlados por um atacante até poder atualizar

Segundo o Node.js, o decodificador tratava uma troca de bloco inválida em dados malformados como uma necessidade temporária de mais entrada, e não como um erro de formato, e por isso continuava escrevendo além do fim de um buffer interno de oito bytes. No Node.js, são afetadas as aplicações que descomprimem com node:zlib dados Brotli fornecidos por um atacante. O Node.js classifica o problema como High (alto). Os mesmos lançamentos corrigem outras nove vulnerabilidades.

Segundo o aviso do Bun, o fetch do Bun descomprime automaticamente respostas Brotli por padrão, então o servidor ao qual uma aplicação se conecta, ou um atacante no caminho de uma conexão não criptografada, pode fornecer os dados.

Só uma atualização do sistema operacional pode não resolver

O Brotli é embutido como cópia em muitos programas, incluindo Node.js, Bun, os pacotes Brotli do Python, .NET e Envoy. O JPCERT/CC pede aos usuários cujas aplicações descomprimem dados Brotli que consultem as informações mais recentes de cada fornecedor sobre impacto e status das correções. A Microsoft também diz que atualizar o runtime compartilhado não corrige apps NativeAOT; eles precisam ser republicados.

Situação da exploração e da prova de conceito

Na manhã de 27 de outubro (horário do Japão), Google, Node.js, Microsoft e JPCERT/CC não relatam exploração real. O catálogo KEV da CISA (versão de 26 de outubro) não lista a falha. A avaliação SSVC da CISA adicionada ao NVD em 23 de outubro classifica a exploração como nenhuma, a automatização como não e o impacto técnico como total. O CVSS da Microsoft classifica a maturidade do código de exploração como não comprovada.

As fontes primárias não mencionam uma prova de conceito pública. Um site explicativo independente diz que uma foi publicada em 22 de outubro: em builds padrão ela só causa um travamento e uma leitura limitada de memória, enquanto em uma build deliberadamente enfraquecida chega à execução de código. O mesmo site diz que a equipe de pesquisa de uma empresa de segurança conseguiu executar código em uma imagem oficial do Node.js sem divulgar o método. Este site não verificou nada disso e não o linka.

O Ubuntu classifica o problema com prioridade Medium (média), enquanto o Google lhe atribui 9,2. O que pesa mais no seu caso depende de você descomprimir dados recebidos de fora (visão deste site).

Sobre as principais bibliotecas HTTP do Python

Até 27 de outubro, requests, urllib3, httpx e aiohttp não publicaram avisos sobre esta falha (este site verificou a lista de avisos de segurança de cada repositório). urllib3, httpx e aiohttp tratam brotli ou brotlicffi como extras opcionais e só descomprimem Brotli quando um deles está instalado. Os pacotes a corrigir são brotli e brotlicffi no mesmo ambiente. Atualizar apenas a biblioteca HTTP não adianta se o brotli continuar antigo.

O que ainda não se sabe

ItemSituação
Exploração realNão relatada por fontes primárias. Não está no KEV
Prova de conceito públicaNão mencionada por fontes primárias. Um site independente diz que existe (não verificado)
Avaliação do NVDAguardando análise (só o 9,2 do Google)
Lista completa de produtos afetadosAinda crescendo. Para navegadores e outros produtos, consulte o aviso de cada fornecedor
Distribuições LinuxUbuntu 20.04 e anteriores ainda não avaliados

Fontes

Todas verificadas em 27 de outubro de 2026.

  • JPCERT/CC, alerta sobre a escrita fora dos limites do Brotli (CVE-2026-111497) (JPCERT-AT-2026-0034, 26 de outubro de 2026, em japonês) — jpcert.or.jp
  • PHP, "Updated PHP Windows builds for Brotli security fix" (26 de outubro de 2026) — php.net
  • Lançamentos do Google Brotli v1.2.1, v1.1.1, v1.0.10 (21 de outubro de 2026) — v1.2.1 / v1.1.1 / v1.0.10
  • Node.js, "Node.js Security Releases" (21 de outubro de 2026) — nodejs.org
  • Microsoft, "Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability" (25 de outubro de 2026) — github.com/dotnet
  • GitHub Advisory Database GHSA-9v8h-qqgm-4m35 (brotli e brotlicffi do PyPI) — github.com
  • PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
  • Bun, "Bundled brotli decoder has an out-of-bounds write" (GHSA-663w-cv8g-jj2p, 23 de outubro de 2026) — github.com
  • Envoy, "Out-of-Bounds Write in Brotli Decompressor" (GHSA-3wvj-j6qm-62mr, 23 de outubro de 2026) — github.com
  • NVD, "CVE-2026-111497" — nvd.nist.gov
  • CISA, "Known Exploited Vulnerabilities Catalog" (não listada na versão de 26 de outubro) — cisa.gov
  • Ubuntu, "CVE-2026-111497" — ubuntu.com / Debian, "DLA-4855-1 brotli" — lists.debian.org

Histórico de atualizações

2026-10-27: Primeira versão, com base em informações públicas do Google, Node.js, Microsoft, Bun, Envoy, PHP, PyPI, JPCERT/CC, NVD, catálogo KEV da CISA, Ubuntu e Debian.

Leia a seguir

Notícias urgentes recentes

FAQ

QO que aconteceu?
A

Em 21 de outubro de 2026 (horário dos EUA), o Google publicou o Brotli 1.2.1, 1.1.1 e 1.0.10 para corrigir a CVE-2026-111497, uma escrita fora dos limites na biblioteca oficial do Brotli. Descomprimir dados manipulados pode corromper a memória e causar travamentos, exposição de memória ou, potencialmente, execução de código. Node.js, Bun, os pacotes Brotli do Python, .NET e outros lançaram correções para as cópias que embutem.

QO que são Node2Shell e HTTP2Shell?
A

São apelidos desta vulnerabilidade. Segundo o JPCERT/CC, ela é chamada de Node2Shell em relação à divulgação do Node.js, e de HTTP2Shell porque o Brotli é amplamente usado na compressão HTTP. Ambos se referem à CVE-2026-111497, não a falhas diferentes.

QSou afetado?
A

Você é afetado se um software que embute o Brotli 1.0.3–1.0.9, 1.1.0 ou 1.2.0 descomprime dados Brotli recebidos de fora. Isso significa Node.js anterior a 22.23.4, 24.22.1 ou 26.12.1 nessas linhas, brotli do PyPI anterior a 1.2.1, brotlicffi anterior a 1.2.1.0 e .NET anterior a 8.0.33, 9.0.22 ou 10.0.14. A Microsoft diz que o ASP.NET Core e o HttpClient não descomprimem Brotli automaticamente por padrão, então a exposição do .NET depende de você ter habilitado isso.

QInstalei as atualizações do sistema operacional. Isso basta?
A

Nem sempre. As builds oficiais do Node.js e as imagens Docker do nodejs.org, o Bun, os wheels do Brotli para Python instalados pelo PyPI, os apps .NET autocontidos e NativeAOT e os executáveis de arquivo único do Bun carregam o próprio Brotli. Atualizar a libbrotli do sistema operacional não altera essas cópias. Atualize cada uma e depois reconstrua e reimplante as imagens de contêiner e os executáveis. O Node.js instalado como pacote do Ubuntu ou do Debian usa a libbrotli do sistema, então uma atualização do sistema operacional o corrige (rastreadores de segurança do Ubuntu e do Debian).

QEla está sendo explorada?
A

Na manhã de 27 de outubro (horário do Japão), nenhuma fonte primária relata exploração, e o catálogo KEV da CISA não a lista. A avaliação SSVC da CISA adicionada ao NVD em 23 de outubro classifica a exploração como nenhuma. Google, Node.js, JPCERT/CC e Microsoft não mencionam uma prova de conceito pública. Um site explicativo independente diz que uma foi publicada; este site não verificou isso.

QPreciso atualizar requests, urllib3, httpx ou aiohttp?
A

Até 27 de outubro, nenhuma dessas bibliotecas publicou um aviso sobre esta falha. urllib3, httpx e aiohttp só descomprimem Brotli quando brotli ou brotlicffi está instalado (requests usa urllib3). O que precisa ser corrigido é o brotli (1.2.1 ou posterior) e o brotlicffi (1.2.1.0 ou posterior) no mesmo ambiente. Verifique com pip show brotli brotlicffi.