Aikido

Node2Shell: Vulnerabilidade do Brotli no Node.js permite a execução remota de código (CVE-2026-111497)

Escrito por
Sooraj Shah

TL;DR

O Node.js lançou na quarta-feira uma atualização de segurança para corrigir uma falha na forma como descomprime dados Brotli, um bug a que já se refere como Node2Shell (CVE-2026-111497). Se um atacante conseguir introduzir uma carga maliciosa na sua aplicação, a falha pode provocar a falha do processo, causar uma fuga de parte da sua memória ou, potencialmente, permitir que o atacante execute o seu próprio código.

Quem está afetado: qualquer pessoa que utilize o Node.js ou o Bun e cuja aplicação descompacte dados Brotli que um atacante possa controlar.

Solução: atualize para a versão corrigida do Node.js correspondente à sua linha de lançamento

  • 22.x -> 22.23.4
  • 24.x -> 24.22.1
  • 26.x -> 26.12.1

No caso do Bun, atualize para a versão 1.4.4 ou posterior.

Como o Aikido ajuda: o Aikido deteta a vulnerabilidade e indica quais os repositórios e imagens container que ainda executam uma versão vulnerável.

Quem é afetado pela vulnerabilidade CVE-2026-111497?

Se estiver a utilizar o Node.js, considere que está afetado até ter verificado a sua versão. Todas as linhas de versões suportadas apresentavam a falha antes da atualização de 21 de outubro, e o Bun também a apresentava até à versão 1.4.4.

O grau de exposição depende da origem dos dados comprimidos da sua aplicação. O Brotli é um formato de compressão que os servidores e os clientes utilizam para reduzir o tráfego web, e a vulnerabilidade pode ser ativada quando o Node.js descomprime dados Brotli controlados por um atacante. Isso pode acontecer de, pelo menos, três formas:

  • Servidores que aceitam pedidos: Express 5 e o body-parser 2.x descomprime os corpos dos pedidos enviados com Content-Encoding: br, e qualquer cliente pode enviar um. Um servidor HTTP Node.js básico não descodifica, por si só, os corpos Brotli recebidos.
  • Aplicações que acedem a outros servidores: fetch() descompacta automaticamente as respostas Brotli, pelo que um servidor controlado por um atacante ou que tenha sido comprometido pode aceder à sua aplicação através dessa resposta. Os webhooks e outras funcionalidades que acedem a URLs fornecidas pelo utilizador são os alvos mais comuns.
  • Código que utiliza nó:zlib diretamente: qualquer entrada não confiável passada às suas funções Brotli. Muitas outras estruturas de servidor nas quais as aplicações se baseiam farão isso por si.
Linha de libertaçãoStatusVersão corrigida
Node.js 26.xAtual26.12.1
Node.js 24.xApoio a longo prazo24.22.1
Node.js 22.xApoio a longo prazo22.23.4
Node.js 25.x, 23.x, 20.x e versões anterioresFim da vida útilNão há solução

Como corrigir a vulnerabilidade CVE-2026-111497

A solução consiste numa atualização do Node.js e envolve quatro passos:

  1. Verifique a sua versão com node --versão em computadores portáteis, executores de CI, servidores e dentro de contentores.
  2. Atualize para a versão 22.23.4, 24.22.1 ou 26.12.1, ou para uma versão de correção mais recente da mesma linha.
  3. Recrie e volte a implementar as suas imagens do container . Uma imagem associada a uma etiqueta anterior, como, por exemplo, nó:22.23.3-alpine, permanece vulnerável até que o reinstale numa versão corrigida.
  4. Planeie a migração das versões Node.js 25.x, 23.x, 20.x e anteriores. Essas versões chegaram ao fim do ciclo de vida e não receberão esta correção.

As plataformas geridas que incluem o seu próprio ambiente de execução do Node.js podem ficar desatualizadas em relação à versão original; por isso, verifique qual a versão que o seu fornecedor utiliza. Se não for possível atualizar neste momento, consulte as soluções provisórias abaixo. Os utilizadores do Bun devem atualizar para a versão 1.4.4 ou posterior do Bun, que inclui a correção. A equipa do Bun registou este problema na issue 46352 do repositório oven-sh/bun.

Se o seu Node.js tiver sido instalado a partir de um pacote de uma distribuição Linux, como o Debian, o Ubuntu, o Fedora, o RHEL ou o Alpine, é possível que utilize a biblioteca Brotli do sistema em vez da cópia incluída no pacote do Node.js. Nesse caso, a correção é disponibilizada através do pacote Brotli da sua distribuição; por isso, verifique o aviso de segurança da sua distribuição, bem como o número da versão.

Como o « Aikido » ajuda a resolver a vulnerabilidade CVE-2026-111497

Aikido deteta esta vulnerabilidade e assinala as versões do Node.js afetadas nos seus repositórios e nas imagens docontainer . O seu painel de controlo mostra quais os serviços que ainda executam um ambiente de execução vulnerável, para que possa atualizar primeiro aqueles que acedem a servidores externos ou aceitam corpos de pedidos comprimidos. Após a atualização, uma nova verificação em Aikido confirma que a vulnerabilidade já não existe.

Detalhes técnicos do Node2Shell

O que é o Node2Shell (CVE-2026-111497)?

A vulnerabilidade CVE-2026-111497 consiste numa escrita fora dos limites no descodificador Brotli, desencadeada por dados comprimidos de entrada malformados. Em termos simples, o descodificador pode ser induzido a escrever dados para além do fim de um buffer de memória, o que constitui uma via clássica para falhas do sistema e execução de código. O Node.js atribui-lhe uma classificação elevada e descreve o impacto como execução remota de código.

O Brotli é a biblioteca de compressão da Google, e o Node.js inclui a sua própria versão. A falha reside nesse código integrado, pelo que corrigi-la implica atualizar o próprio ambiente de execução do Node.js. O Node.js executa o descodificador sempre que descomprime dados Brotli, seja diretamente através do nó:zlib módulo ou automaticamente quando fetch() recebe uma resposta enviada com compressão Brotli.

A correção consiste num patch do projeto Brotli, que o Node.js selecionou seletivamente (Commit do Brotli 0ed4268a (a partir de fevereiro). Isso faz com que o descodificador detete uma entrada inválida e pare antes de escrever para além do buffer. A mesma correção foi incluída nas versões 1.2.1, 1.1.1 e 1.0.10 do Brotli, pelo que outro software que inclua o Brotli poderá também necessitar de uma atualização.

Qual é o grau de gravidade da vulnerabilidade CVE-2026-111497 e está a ser explorada?

O Node.js classifica a falha como de gravidade elevada, um nível abaixo de «crítica», e a investigação pública avançou rapidamente. Uma primeira prova de conceito, publicada a 22 de outubro, conseguiu a execução de código apenas numa versão de teste deliberadamente enfraquecida. No mesmo dia, investigadores de segurança relataram a execução de código na imagem oficial e não modificada do Node.js 24.22.0 no Linux arm64, embora a sua exploração não tenha funcionado em todas as tentativas e o Node.js 24.22.1 rejeite a mesma entrada. De acordo com o The Hacker News, até 22 de outubro não tinha sido relatada qualquer exploração em ambiente real.

De qualquer forma, trate isto como urgente. A falha consiste numa falha de segurança de memória num componente de tempo de execução que processa entradas de rede não confiáveis; existem provas de conceito públicas e a correção consiste numa simples atualização de versão. Os serviços que chamam servidores externos ou aceitam corpos de pedidos comprimidos devem ser os primeiros a ser corrigidos.

Como verificar se a sua aplicação está exposta

  1. Enumere todas as versões do Node.js que utiliza: node --versão nos anfitriões e nos executores de CI, e docker run --rm <image> node --version para cada imagem do tipo « container ». Um inventário de pacotes pode não incluir um runtime que esteja integrado numa imagem.
  2. Descubra onde os dados do Brotli são introduzidos. Execute npm ls express body-parser para detetar o Express 5 e o body-parser 2.x, e procurar no seu código (e nas suas dependências) por brotliDescomprimir e createBrotliDecompress de nó:zlib.
  3. Enumerar as saídas fetch() chamadas que são encaminhadas para servidores que não controla, incluindo envios de webhooks e URLs fornecidas pelos utilizadores.
  4. Atualize primeiro os serviços que correspondem aos passos 2 ou 3 e, em seguida, os restantes.

Um ficheiro Dockerfile fixado em nó:24.22.0 continua vulnerável, independentemente da frequência com que o reconstrua. Atualize o pin para a versão 24.22.1 ou posterior.

O que fazer se ainda não for possível atualizar

O aviso da Node.js não apresenta nenhuma solução alternativa para a falha do Brotli. Estas medidas provisórias reduzem a exposição enquanto prepara a atualização:

  • Rejeitar pedidos codificados com Brotli: descartar os pedidos recebidos com Content-Encoding: br no seu proxy inverso, equilibrador de carga ou middleware de aplicações. A Aikido utilizou esta solução provisória em serviços internos que não podiam ser atualizados de imediato.
  • Utilize regras de perímetro sempre que a sua plataforma as disponibilizar: a Vercel adicionou, a 21 de outubro, regras de firewall que bloqueiam o ataque nas solicitações de entrada.

Nenhuma destas soluções provisórias abrange as respostas em formato Brotli que a sua aplicação obtém de outros servidores. Apenas uma atualização em tempo de execução elimina a falha; por isso, considere as soluções provisórias como uma ponte até lá.

Cronologia do Node2Shell

  • Fevereiro de 2026: A correção é incorporada pela primeira vez no código-fonte do Brotli.
  • 21 de outubro de 2026: O Node.js lança as versões 22.23.4, 24.22.1 e 26.12.1. O Brotli inclui a mesma correção nas versões 1.2.1, 1.1.1 e 1.0.10, e a Vercel adiciona regras de firewall para pedidos de entrada.
  • 22 de outubro de 2026: É divulgada uma prova de conceito pública e os investigadores relatam a execução de código numa versão não modificada do Node.js 24.22.0.

FAQ

O que é o Node2Shell?

Node2Shell é o nome que circula na Internet para designar a vulnerabilidade CVE-2026-111497, a falha no descodificador Brotli do Node.js que, segundo o projeto Node.js, pode permitir a execução remota de código.

Quais são as versões do Node.js que corrigem a vulnerabilidade CVE-2026-111497?

Node.js 22.23.4, 24.22.1 e 26.12.1, bem como qualquer versão de correção mais recente dessas séries. O Node.js 25.x, 23.x, 20.x e versões anteriores chegaram ao fim do ciclo de vida e não recebem correções.

A vulnerabilidade CVE-2026-111497 está a ser explorada?

Até 22 de outubro de 2026, não tinha sido relatada qualquer exploração em ambiente real. Os investigadores relataram a execução de código numa versão não modificada do Node.js 24.22.0 em condições laboratoriais, e a exploração não funcionou em todas as tentativas.

O «body-parser» ou express.json() Isso torna o meu servidor vulnerável?

Sim, se o seu analisador descomprimir os corpos das solicitações em formato Brotli. O Express 5 e o body-parser 2.x fazem isso, pelo que um cliente pode enviar um Content-Encoding: br pedido. A solução consiste em atualizar o Node.js.

Existe alguma solução alternativa?

O aviso do Node.js não menciona nenhuma. Rejeitar pedidos codificados em Brotli na camada de borda reduz a exposição de entrada, mas não protege contra respostas em Brotli que a sua aplicação possa receber.

O Bun está afetado?

Sim, as versões anteriores à 1.4.4 estão afetadas. A versão 1.4.4 do Bun inclui a correção, e a equipa do Bun registou-a na issue 46352 do repositório oven-sh/bun.

Compartilhar:

https://www.aikido.dev/blog/node2shell-nodejs-brotli-rce-cve-2026-111497

Verificar por malware

Comece Gratuitamente
4.7/5
Cansado de falsos positivos?

Experimente Aikido como 100 mil outros.
Começar Agora
Obtenha um tour personalizado

Confiado por mais de 100 mil equipes

Agende Agora
Escaneie seu aplicativo em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipes

Iniciar Escaneamento
Veja como o pentest de IA testa seu aplicativo

Confiado por mais de 100 mil equipes

Iniciar Testes

Torne-se seguro hoje,
de forma rápida e gratuita.

Proteja o seu código, a cloud e o runtime num sistema central.
Conecte um repositório para descobrir o que os agentes de raciocínio encontram na sua base de código.

Não é necessário cartão de crédito | Resultados do teste em 32 segundos.
Confiado por mais de 150 mil orgs