
Beratungs- und Proof-of-Concept-Toolkit für CVE-2026-111497 (Node2Shell), einen Brotli-Heap-Overflow in Node.js, mit Trigger-Skripten, Versionsprüfer und Hinweisen zur Behebung.
Node2Shell
Umfassende Sicherheitswarnung, technische Analyse und Behebungsleitfaden für CVE-2026-111497
Die im Oktober 2026 offengelegte Schwachstelle Node2Shell (CVE-2026-111497) ist eine kritische Sicherheitslücke, die die native Brotli-Dekomprimierungskomponente betrifft, die direkt in die Node.js-Laufzeit-Binärdatei eingebettet ist.
Der Fehler ermöglicht es entfernten Angreifern, beliebigen Code auszuführen oder die Anwendung zum Absturz zu bringen, indem sie speziell präparierte, fehlerhafte Brotli-komprimierte Byteströme an jede Node.js-Anwendung senden, die komprimierte Eingaben verarbeitet (z. B. HTTP-Request-Body-Parser, native fetch()-Aufrufe oder WebSocket-Streams).
⚠️ KRITISCHER HINWEIS: Da sich der anfällige Code in
deps/brotlibefindet, das in die Node.js-Executable selbst kompiliert wird, behebt das Aktualisieren vonnpm-Abhängigkeiten im User-Space diese Schwachstelle nicht. Die Node.js-Binär-Laufzeitumgebung muss aktualisiert werden.
deps/brotli).Content-Encoding: br) konfiguriert sind.fetch(), das automatisierte Antworten von nicht vertrauenswürdigen Drittanbieter-Endpunkten verarbeitet, die komprimierte Inhalte bereitstellen.zlib.createBrotliDecompress() verwenden.| Node.js-Release-Linie | Status | Behobene Version | Erforderliche Maßnahme |
|---|---|---|---|
| Node.js 26.x | ⚠️ Anfällig | >= 26.12.1 | Sofort aktualisieren |
| Node.js 24.x | ⚠️ Anfällig | >= 24.22.1 | Sofort aktualisieren |
| Node.js 22.x (LTS) | ⚠️ Anfällig | >= 22.23.4 | Sofort aktualisieren |
| Node.js 20.x & älter | ❌ EOL | Keine | Sofort auf unterstütztes LTS migrieren |
🚨 EOL-Warnung: Node.js 20 hat im April 2026 das End-of-Life (EOL) erreicht. Offizielle Sicherheits-Backports sind für EOL-Versionen nicht verfügbar.
$ 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.
Sie können auch diesen Einzeiler ausführen:
node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
-17 zurück → gepatchtmissing zurück → anfälligDas ist dieselbe Prüfung, die das Skript verwendet.
# 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