Serviços

Open source

PT

Node2Shell e as imagens de Node em container

O Node.js corrigiu uma falha crítica no decodificador Brotli que ele embute, a CVE-2026-111497, conhecida como Node2Shell. A mesma biblioteca está no Bun, no Envoy, no .NET e em pacotes Python. Em container, a correção só chega com o rebuild da imagem. No Quor, as imagens de Node 22 e 24 e as de .NET (dotnet-runtime e dotnet-aspnet) já estão corrigidas e disponíveis no trial.

CEO

Diogo Goebel

Na mesma quarta-feira em que o PHP publicou a correção do PHP2Shell, o Node.js lançou dez correções de segurança. A mais grave está no Brotli, a biblioteca de descompressão do Google que o Node carrega dentro do próprio binário.

Desta vez, ninguém do time precisou ir atrás. O scan do Quor identificou a CVE e disparou sozinho o processo de correção: build a partir do código-fonte e rebuild das imagens afetadas. O mesmo processo corrigiu as imagens dotnet-runtime e dotnet-aspnet, que também carregam o Brotli. No PHP2Shell, essa checagem tinha sido manual.

A CVE

CVE

Onde está

Nota

CVE-2026-111497

Decodificador Brotli embutido no Node.js

CVSS 9.2 (Google); o Node.js classifica como alta

Um fluxo Brotli montado para isso faz o decodificador escrever fora do buffer que deveria usar. Com isso dá para derrubar o processo, ler parte da memória ou, em condições específicas, executar código.

O caminho até o decodificador é comum em aplicações de produção. O Node usa o Brotli sempre que descompacta dados desse formato, pelo módulo node:zlib ou automaticamente quando a aplicação chama fetch() e recebe uma resposta comprimida com Brotli. Middlewares que descompactam o corpo da requisição também abrem esse caminho.

A falha foi encontrada pela equipe de segurança do Codex, da OpenAI. A Imperva conseguiu executar código na imagem oficial do Node.js 24.22.0 para Linux arm64, sem build modificado, embora não em toda tentativa. Até agora não há relato de exploração em ambiente real.

As versões corrigidas são 22.23.4, 24.22.1 e 26.12.1, de 21/10. O Node 20, que saiu de suporte em abril, não vai receber correção.

A mudança que corrige o problema entrou no código do Brotli em fevereiro, mas só foi publicada como correção de segurança em outubro.

Uma biblioteca, vários runtimes

O Brotli também está no Bun (corrigido na 1.4.4), no Envoy, no Istio, no .NET e no Python, pelos pacotes brotli e brotlicffi (corrigidos na 1.2.1 e na 1.2.1.0).

Como cada um desses projetos carrega a própria cópia da biblioteca, atualizar o Brotli do sistema operacional não resolve. A correção precisa chegar em cada runtime e em cada pacote, um por um.

Newsletter Getup.

Atualizações sobre Kubernetes e Software Supply Chain Security todos os meses.

No container

A correção só chega ao container quando a imagem é rebuildada. Quem usa tag flutuante, como node:24, precisa fazer rebuild e redeploy. Quem herda o Node de uma imagem de terceiro depende de quem mantém essa imagem.

Em imagens distroless, sem shell nem gerenciador de pacotes, a versão do Node pode ser lida no SBOM da imagem ou com node -v direto no entrypoint.

No Quor, as imagens de Node 22 e 24 já usam as versões corrigidas (22.23.4 e 24.22.1) e estão disponíveis para download no trial, assim como as imagens dotnet-runtime e dotnet-aspnet.

Checklist

  1. Liste onde o Node roda: imagens base, imagens de terceiros, ferramentas de build e CI.

  2. Confira a versão no binário: docker run --rm --entrypoint node <imagem> -v.

  3. Procure também Bun, Envoy, Istio, .NET e os pacotes Python brotli e brotlicffi.

  4. Faça rebuild com --pull, redeploy e fixe a imagem por digest.

  5. Confira pod a pod se todos subiram com a versão nova.

  6. Se estiver no Node 20 ou abaixo, planeje a migração para o 22 ou o 24.

Nesta semana, o rebuild das nossas imagens rodou sozinho. Se quiser o mesmo no seu ambiente, baixe nossas imagens corrigidas através do trial: https://app.quor.dev/images

Fontes

Há mais de 13 anos operando Kubernetes em produção. Com o Quor, essa experiência alcança também a segurança da cadeia de software.