Pular para o conteúdo principal
Fechar
Segurança

Node2Shell: o decoder que ninguém escolheu instalar

Gabriel Ferraresi· CEO | Tech8623 de outubro de 20263 min
nodecvercesegurancacontainers

A família 2Shell cresceu: depois do PHP, pesquisadores demonstraram execução remota de código no Node.js, com build oficial no alvo. O nome que os pesquisadores deram: Node2Shell.

O caso é da Imperva. O alvo era a imagem oficial do Node 24.22.0 para Linux arm64, sem depurador e sem build customizado, e o caminho foi o decoder Brotli que o runtime carrega embutido, CVE-2026-111497. O Node divulgou a falha e publicou a correção em 21 de outubro, o mesmo dia do patch de emergência do PHP, e a versão 24.22.1 rejeita os mesmos dados que executavam código na anterior.

Como a aplicação chega ao decoder que ninguém escolheu

O decoder Brotli existe nas linhas 22.x, 24.x e 26.x, e a aplicação alcança por dois caminhos que quase ninguém lista no inventário: lendo uma resposta comprimida com Brotli pelo fetch() nativo, ou recebendo um corpo de requisição Brotli decodificado por middleware (o Express 5 decodifica nos parsers de corpo, ao lado de gzip e deflate).

Servidor Node puro, sem middleware, não decodifica por conta própria. Mas quem usa framework, usa. E o decoder não foi escolhido: veio embutido no runtime, o que é a definição de superfície de ataque que inventário de pacote declarado não enxerga.

A calibragem honesta da exploração

A primeira prova de conceito pública só executou código num build propositalmente enfraquecido, e na build padrão o autor reportou crash e leitura limitada de memória. A demonstração da Imperva atravessou essa linha no build oficial, mas precisou de várias tentativas, e não há exploração na natureza reportada até 22 de outubro.

A calibragem importa porque define a prioridade: RCE demonstrado no build oficial com várias tentativas é correção desta semana; prova de conceito em build enfraquecido é correção do ciclo. As duas atualizam; a urgência é diferente.

O que fazer

  1. Atualizar para a 24.22.1, lembrando que imagens de container e artefatos que embutem o binário do Node precisam de atualização própria, que inventário de pacote sozinho não pega.
  2. Mapear as linhas fora de suporte: a 20.x e anteriores não recebem a correção e ficam expostas.
  3. Limitar tráfego Brotli não confiável na borda enquanto a atualização alcança o parque: Imperva e Vercel já publicaram regras.
  4. Descer o inventário até o binário: imagem de container, decoder embutido, versão de linha e data de fim de vida.

Conclusão

A semana desenhou o mapa: PHP, kernel e agora o decoder que ninguém escolheu instalar. O perímetro do serviço inclui o que o runtime carrega dentro, e o inventário que só olha pacote declarado não enxerga esse andar.

A família 2Shell provavelmente ganhará mais membros, porque a técnica (caminho até um decoder embutido com dado hostil) não é específica de runtime. A defesa que sobrevive à família é o inventário que desce até o binário e a borda que filtra o que o runtime vai decodificar.

Interessado nesta solução?

Conheça nossos serviços gerenciados e infraestrutura.

Blindagem de runtime e containers

Perguntas Frequentes

O nome que os pesquisadores deram à execução remota de código demonstrada pela Imperva no decoder Brotli embutido no runtime do Node.js, CVE-2026-111497. O alvo era a imagem oficial do Node 24.22.0 para Linux arm64, sem depurador e sem build customizado. O Node divulgou a falha e publicou a correção em 21 de outubro, o mesmo dia do patch de emergência do PHP, e a versão 24.22.1 rejeita os dados que executavam código na anterior.

O decoder Brotli existe nas linhas 22.x, 24.x e 26.x, e a aplicação alcança por dois caminhos: lendo uma resposta comprimida com Brotli pelo fetch() nativo, ou recebendo um corpo de requisição Brotli decodificado por middleware. O Express 5 decodifica Brotli nos parsers de corpo quando aplicados à rota, ao lado de gzip e deflate. Servidor Node puro, sem middleware, não decodifica por conta própria.

Com calibragem honesta: a primeira prova de conceito pública só executou código num build propositalmente enfraquecido, e na build padrão o autor reportou crash e leitura limitada de memória. A demonstração da Imperva atravessou essa linha no build oficial, mas precisou de várias tentativas, e não há exploração na natureza reportada até 22 de outubro.

Atualizar para a versão corrigida, lembrando que imagens de container e artefatos que embutem o binário do Node precisam de atualização própria, que inventário de pacote sozinho não pega. Linha 20.x e anteriores estão fora de suporte e não recebem a correção. Dentro do runtime não há workaround: o que sobra é limitar tráfego Brotli não confiável na borda.

Porque a semana desenhou o mapa: PHP, kernel e agora o decoder que ninguém escolheu instalar. O perímetro do agente e do serviço inclui o que o runtime carrega dentro, e inventário que só olha pacote declarado não enxerga esse andar.

Blog, Fale Conosco

Tem alguma pergunta sobre nossos artigos ou serviços? Nossa equipe está pronta para ajudar.

Agendar Reunião

Reserve um horário.

Agendar Agora

E-mail

Envie uma mensagem.

[email protected]

WhatsApp

Conversa rápida.

Endereço

Avenida Paulista, 1636 - São Paulo - SP - 01310-200

Especialista Tech86

Online agora

Olá! Como podemos ajudar a escalar seu negócio hoje?

Tech86 Engineering

Nós valorizamos sua privacidade

Utilizamos cookies e tecnologias similares para otimizar a sua experiência, analisar o tráfego do site e personalizar conteúdo. Ao clicar "Aceitar Todos", você concorda com o uso de todos os cookies. Leia nossa Política de Privacidade.