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ó:zlibdiretamente: 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ção | Status | Versão corrigida |
|---|---|---|
| Node.js 26.x | Atual | 26.12.1 |
| Node.js 24.x | Apoio a longo prazo | 24.22.1 |
| Node.js 22.x | Apoio a longo prazo | 22.23.4 |
| Node.js 25.x, 23.x, 20.x e versões anteriores | Fim da vida útil | Nã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:
- Verifique a sua versão com
node --versãoem computadores portáteis, executores de CI, servidores e dentro de contentores. - 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.
- 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. - 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
- Enumere todas as versões do Node.js que utiliza:
node --versãonos anfitriões e nos executores de CI, edocker run --rm <image> node --versionpara cada imagem do tipo « container ». Um inventário de pacotes pode não incluir um runtime que esteja integrado numa imagem. - Descubra onde os dados do Brotli são introduzidos. Execute
npm ls express body-parserpara detetar o Express 5 e o body-parser 2.x, e procurar no seu código (e nas suas dependências) porbrotliDescomprimirecreateBrotliDecompressdenó:zlib. - 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. - 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: brno 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.