
Kit de ferramentas de advisory e prova de conceito para CVE-2026-111497 (Node2Shell), um heap overflow de Brotli no Node.js, com scripts de acionamento, verificador de versão e orientações de remediação.
Node2Shell
Aviso de Segurança Abrangente, Análise Técnica e Guia de Remediação para CVE-2026-111497
Divulgada em outubro de 2026, a Node2Shell (CVE-2026-111497) é uma vulnerabilidade de segurança crítica que afeta o componente nativo de descompressão Brotli incluído diretamente no binário do runtime Node.js.
A falha permite que atacantes remotos executem código arbitrário ou derrubem a aplicação ao enviar fluxos de bytes comprimidos com Brotli especialmente criados e malformados para qualquer aplicação Node.js que processe entrada comprimida (por exemplo, parsers de corpo de requisições HTTP, chamadas nativas fetch() ou fluxos WebSocket).
⚠️ NOTA CRÍTICA: Como o código vulnerável reside em
deps/brotli, compilado dentro do próprio executável do Node.js, atualizar as dependênciasnpmdo espaço do usuário não mitigará esta vulnerabilidade. O runtime binário do Node.js precisa ser atualizado.
deps/brotli).Content-Encoding: br).fetch() nativo processando respostas automatizadas de endpoints de terceiros não confiáveis que servem conteúdo comprimido.zlib.createBrotliDecompress().| Linha de Lançamento do Node.js | Estado | Versão Corrigida | Ação Necessária |
|---|---|---|---|
| Node.js 26.x | ⚠️ Vulnerável | >= 26.12.1 | Atualizar imediatamente |
| Node.js 24.x | ⚠️ Vulnerável | >= 24.22.1 | Atualizar imediatamente |
| Node.js 22.x (LTS) | ⚠️ Vulnerável | >= 22.23.4 | Atualizar imediatamente |
| Node.js 20.x e anteriores | ❌ EOL | Nenhuma | Migrar imediatamente para uma LTS suportada |
🚨 Alerta de EOL: O Node.js 20 atingiu o Fim de Vida (EOL) em abril de 2026. Backports de segurança oficiais não estão disponíveis para versões EOL.
$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.
Current Node.js version : v24.22.1
Brotli constant present : yes (-17) → patched decoder
───────────────────────────────────────────────────────
Verdict: PATCHED
You are running a fixed release of the 24.x line.
Additional notes:
• The constant check is the most reliable signal when Node.js ships
its own (statically linked) Brotli. On some Linux distros Node may
use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1
$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.
Current Node.js version : v24.22.0
Brotli constant present : no / missing → likely vulnerable decoder
───────────────────────────────────────────────────────
Verdict: VULNERABLE
Upgrade to Node.js 24.22.1 or later in the 24.x line.
Additional notes:
• The constant check is the most reliable signal when Node.js ships
its own (statically linked) Brotli. On some Linux distros Node may
use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1
Current Node.js version : v20.18.0
Brotli constant present : no / missing → likely vulnerable decoder
Verdict: VULNERABLE (EOL / UNSUPPORTED)
This release line is end-of-life or never received the security fix.
Migrate to a supported LTS line (22.x, 24.x or 26.x) and use a patched version.
Você também pode executar este one-liner:
node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
-17 → corrigidomissing → vulnerávelEssa é a mesma verificação que o script utiliza.
# Python dependencies
pip install requests brotli
# Node server (webhook injection + eval paths)
npm install
node server-stock.js # port 3000
# Real CVE trigger — hang a Node.js HTTP server (Content-Encoding: br)
python3 Node2Shell.py -u http://TARGET:3000 --hang --path /api/data --timeout 10