Uma nova vulnerabilidade de segurança identificada como Node2Shell (CVE-2026-111497) coloca aplicações desenvolvidas em Node.js sob risco de execução remota de código (RCE). A falha está no decodificador Brotli, utilizado para descompactar dados, e pode permitir que invasores executem comandos arbitrários em servidores que processem conteúdo comprimido especialmente preparado.
A gravidade do problema foi demonstrada por pesquisadores da Imperva, que conseguiram executar código malicioso em uma instalação oficial do Node.js, sem modificar o ambiente ou utilizar ferramentas especiais de depuração. O experimento confirmou que a vulnerabilidade representa uma ameaça concreta para aplicações backend, APIs e serviços que recebem ou consomem dados Brotli de fontes não confiáveis.
O projeto Node.js disponibilizou atualizações de segurança em 21 de outubro de 2026, corrigindo o problema nas versões 22, 24 e 26. Desenvolvedores, administradores Linux e equipes de DevOps devem verificar imediatamente os ambientes de produção, especialmente aqueles que utilizam Express 5, body-parser 2.x e requisições HTTP com descompressão automática.
Como funciona a vulnerabilidade Node2Shell no Node.js
A vulnerabilidade CVE-2026-111497 é causada por uma falha de gerenciamento de memória no decodificador Brotli integrado ao Node.js. O problema ocorre quando a biblioteca processa determinadas estruturas inválidas presentes em fluxos de dados comprimidos.
O Brotli é um algoritmo de compressão desenvolvido pelo Google, amplamente utilizado para reduzir o tamanho de conteúdos transmitidos pela internet. Sua utilização melhora a eficiência de aplicações web, diminuindo o consumo de banda e acelerando a transferência de informações.
Entretanto, quando um aplicativo recebe conteúdo comprimido, precisa descompactá-lo antes de interpretar os dados. É justamente nesse processo que a vulnerabilidade pode ser explorada.
Em condições específicas, um arquivo ou fluxo Brotli malformado faz o decodificador continuar operando em um estado interno inválido. Como consequência, ocorre uma gravação de dados fora dos limites da memória reservada, conhecida tecnicamente como out-of-bounds write.
Esse comportamento pode provocar corrupção de memória, encerramento inesperado de processos e, em situações exploráveis, execução de código controlado por um invasor.

Por que a Node2Shell pode permitir execução remota de código
A exploração depende de uma condição fundamental: a aplicação precisa encaminhar dados Brotli controlados pelo atacante ao decodificador vulnerável.
Durante a investigação, a equipe da Imperva identificou uma inconsistência na maneira como o componente interpreta transições entre blocos de dados comprimidos.
Em vez de reconhecer imediatamente uma estrutura inválida, o decodificador poderia interpretar a situação como necessidade de receber mais informações. Isso permitia que o processamento continuasse mesmo com o estado interno comprometido.
Os pesquisadores demonstraram que essa condição poderia ser utilizada para executar código arbitrário dentro do processo Node.js.
O impacto potencial inclui comprometimento de servidores, acesso a informações sensíveis, interrupção de serviços e execução de ações com as permissões da aplicação afetada.
É importante destacar que a falha não concede automaticamente privilégios administrativos. O alcance do comprometimento depende das permissões atribuídas ao processo e das proteções implementadas no ambiente.
Imperva demonstra exploração em ambiente real de Node.js
A pesquisa da Imperva mostrou que a Node2Shell não representa apenas uma possibilidade teórica.
Os especialistas desenvolveram uma prova de conceito funcional utilizando a imagem Docker oficial do Node.js 24.22.0 para Linux arm64.
O ataque conseguiu executar código fornecido por meio de dados Brotli manipulados, sem exigir alterações no binário original.
A demonstração também utilizou diferentes caminhos de processamento, incluindo respostas HTTP consumidas pelo aplicativo e corpos de requisições recebidos pelo servidor.
Quando os mesmos testes foram realizados com o Node.js 24.22.1, já corrigido, os dados maliciosos foram rejeitados e a execução de código não ocorreu.
Embora a exploração tenha exigido múltiplas tentativas em determinados cenários, o resultado confirma a necessidade de tratamento prioritário.
Até 22 de outubro de 2026, não havia confirmação pública de exploração ativa da vulnerabilidade em ataques reais. A existência de uma prova de conceito funcional, entretanto, aumenta a preocupação com possíveis tentativas futuras.
Versões do Node.js afetadas pela vulnerabilidade Node2Shell
A falha atinge as versões anteriores às atualizações de segurança disponibilizadas para as três linhas oficialmente mantidas do Node.js.
As versões corrigidas são:
Aplicações que utilizam versões anteriores dentro dessas linhas devem ser atualizadas para a versão corrigida correspondente ou uma posterior que incorpore a correção.
Versões antigas, como Node.js 20.x e anteriores, já encerraram seu ciclo oficial de suporte e não receberam essa atualização. Nesses casos, a recomendação é migrar para uma linha mantida.
O mesmo cuidado se aplica a versões intermediárias sem suporte, como Node.js 23 e 25.
Outro detalhe importante envolve distribuições Linux que utilizam bibliotecas Brotli fornecidas pelo próprio sistema operacional. Nesses ambientes, a disponibilidade da correção pode depender dos pacotes mantidos pela distribuição, tornando indispensável consultar o estado de segurança do pacote efetivamente instalado.
Express e body-parser também podem expor aplicações
A Node2Shell merece atenção especial de desenvolvedores que utilizam o framework Express, um dos componentes mais populares do ecossistema Node.js.
A Imperva demonstrou exploração em configurações com Express 5.0.0 e 5.3.0, além de versões do body-parser 2.x.
Essas ferramentas permitem interpretar o corpo de requisições HTTP e, dependendo da configuração, descompactar automaticamente dados recebidos.
Quando uma requisição utiliza o cabeçalho Content-Encoding: br, o middleware pode encaminhar seu conteúdo ao decodificador Brotli integrado ao Node.js.
Isso cria um caminho pelo qual dados enviados por um cliente externo podem alcançar o componente vulnerável.
Os testes da Imperva abrangeram configurações específicas com Express 5.0.0 a 5.3.0 e body-parser 2.0.0 a 2.3.0, mas não verificaram individualmente todas as versões intermediárias.
É fundamental esclarecer que a vulnerabilidade não está originalmente no Express ou no body-parser. Essas ferramentas funcionam como caminhos de acesso ao decodificador afetado.
Portanto, atualizar somente as dependências JavaScript não substitui a correção do runtime Node.js.
Aplicações com Express 4 também não devem ser consideradas automaticamente seguras. Embora o body-parser 1.x tradicional não ofereça o mesmo processamento de requisições Brotli, outras bibliotecas ou funcionalidades podem utilizar o decodificador vulnerável.
Requisições HTTP e fetch() ampliam a superfície de ataque
A exposição não está limitada aos servidores que recebem requisições comprimidas.
Aplicações que utilizam a API nativa fetch() para consumir respostas HTTP externas também podem alcançar o decodificador vulnerável.
Isso acontece porque respostas recebidas com compressão Brotli podem ser descompactadas automaticamente.
Imagine um serviço backend que consulta uma API externa ou processa conteúdos de endereços fornecidos por usuários. Caso uma resposta contenha dados Brotli maliciosos, o aplicativo poderá encaminhá-los ao componente afetado.
O risco também existe em aplicações que utilizam diretamente as funções de descompressão Brotli do módulo node:zlib.
Por outro lado, um servidor HTTP básico não se torna explorável simplesmente por receber uma requisição comprimida. É necessário que algum componente efetivamente realize a descompressão dos dados controlados pelo atacante.
Essa distinção é importante para avaliar a exposição real de cada aplicação e priorizar as correções.
Como corrigir a vulnerabilidade Node2Shell imediatamente
A principal medida de proteção é atualizar o Node.js para uma versão corrigida.
Antes de realizar alterações, os administradores devem identificar a versão instalada em cada ambiente de execução.
No terminal, execute:
node --versionO comando mostra a versão do runtime disponível no ambiente atual.
Em servidores com múltiplas instalações, gerenciadores de versões ou containers, essa verificação precisa ser realizada individualmente.
Após identificar a versão utilizada, atualize o Node.js por meio do gerenciador de versões, repositório oficial ou mecanismo de distribuição adotado pela infraestrutura.
Em ambientes que utilizam Docker, não basta atualizar o Node.js na máquina hospedeira. É necessário reconstruir as imagens com uma versão corrigida e substituir os containers em execução.
Equipes responsáveis por pipelines de integração e entrega contínua também devem revisar imagens-base, artefatos de implantação e versões fixadas em configurações automatizadas.
Depois da atualização, execute novamente:
node --versionConfirme que o processo efetivamente utiliza a versão corrigida e realize testes funcionais antes de concluir a implantação.
Medidas temporárias para reduzir os riscos
Quando a atualização imediata não for possível, algumas medidas podem diminuir a superfície de exposição.
Uma alternativa é restringir temporariamente o recebimento de corpos de requisições comprimidos com Brotli em endpoints que não necessitam desse recurso.
Também é recomendável revisar os serviços que consomem respostas HTTP externas, especialmente quando os destinos podem ser influenciados por usuários.
Administradores podem utilizar regras de Web Application Firewall (WAF) para identificar ou bloquear determinadas tentativas de exploração. A própria Imperva informou ter implementado proteções específicas contra a CVE-2026-111497.
Entretanto, essas medidas apresentam limitações. Um WAF configurado para inspecionar requisições recebidas não necessariamente protege uma aplicação que descompacta respostas externas.
Monitorar falhas inesperadas de processos, erros de descompressão e comportamentos anormais também pode auxiliar na investigação, embora esses eventos não comprovem, isoladamente, uma tentativa de exploração.
Nenhuma dessas medidas substitui a atualização do Node.js.
Impacto da Node2Shell reforça a importância das atualizações de segurança
A descoberta da Node2Shell evidencia como uma vulnerabilidade em um componente de baixo nível pode comprometer aplicações que utilizam frameworks amplamente conhecidos.
Mesmo quando o código da aplicação não apresenta falhas evidentes, bibliotecas nativas incorporadas ao ambiente de execução podem introduzir riscos relevantes.
A situação é especialmente preocupante em infraestruturas que utilizam microsserviços, containers e processos automatizados de implantação, nas quais diferentes versões do Node.js podem permanecer distribuídas por numerosos sistemas.
A confirmação de execução remota de código pela Imperva transforma a CVE-2026-111497 em uma prioridade para equipes de segurança e operações.
Organizações devem identificar os serviços expostos, verificar onde ocorre descompressão de dados Brotli e aplicar as versões corrigidas com urgência.
Para desenvolvedores e administradores, a recomendação é clara: não esperar por incidentes confirmados para atualizar os ambientes de produção. A correção já está disponível, e sua implantação é a medida mais eficaz para eliminar o risco associado ao decodificador vulnerável.