
Toolkit di advisory e proof-of-concept per CVE-2026-111497 (Node2Shell), un heap overflow di Brotli in Node.js, con script di trigger, verificatore di versione e indicazioni per la remediation.
Node2Shell
Avviso di sicurezza completo, analisi tecnica e guida alla correzione per CVE-2026-111497
Divulgata nell'ottobre 2026, Node2Shell (CVE-2026-111497) è una vulnerabilità di sicurezza critica che interessa il componente nativo di decompressione Brotli incluso direttamente nel binario del runtime Node.js.
Il difetto consente ad attaccanti remoti di eseguire codice arbitrario o di mandare in crash l'applicazione inviando flussi di byte compressi con Brotli appositamente costruiti e malformati a qualsiasi applicazione Node.js che elabora input compressi (ad esempio, parser del corpo delle richieste HTTP, chiamate native a fetch() o flussi WebSocket).
⚠️ NOTA CRITICA: Poiché il codice vulnerabile risiede in
deps/brotlicompilato all'interno dell'eseguibile Node.js stesso, l'aggiornamento delle dipendenzenpmnello spazio utente non mitigherà questa vulnerabilità. È necessario aggiornare il runtime binario di Node.js.
deps/brotli).Content-Encoding: br).fetch() nativo che elabora risposte automatiche da endpoint di terze parti non attendibili che servono contenuti compressi.zlib.createBrotliDecompress().| Linea di rilascio Node.js | Stato | Versione corretta | Azione richiesta |
|---|---|---|---|
| Node.js 26.x | ⚠️ Vulnerabile | >= 26.12.1 | Aggiornare immediatamente |
| Node.js 24.x | ⚠️ Vulnerabile | >= 24.22.1 | Aggiornare immediatamente |
| Node.js 22.x (LTS) | ⚠️ Vulnerabile | >= 22.23.4 | Aggiornare immediatamente |
| Node.js 20.x e precedenti | ❌ EOL | Nessuna | Migrare immediatamente a una LTS supportata |
🚨 Avviso EOL: Node.js 20 ha raggiunto l'End-of-Life (EOL) ad aprile 2026. I backport di sicurezza ufficiali non sono disponibili per le versioni 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.
Puoi anche eseguire questo one-liner:
node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
-17 → correttomissing → vulnerabileÈ lo stesso controllo utilizzato dallo script.
# Python dependencies
pip install requests brotli
# Node server (webhook injection + eval paths)
npm install
node server-stock.js # port 3000