
मूल रूप से: https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
और आप देखेंगे कि किसी भी फ़ंक्शन की done प्रॉपर्टी true में बदल जाती है।
कमांड लाइन node index.js --_.concat.constructor.prototype.done true का स्पष्टीकरण:
-- हाइफ़न चिह्न है जो सामान्यतः कमांड लाइन तर्कों में प्रयोग होता है।_ minimist में निर्मित कुंजी है: https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true _.concat.constructor.prototype.done को true पर सेट करेगा।
चूँकि _.concat.constructor एक Function प्रकार है, सभी Function के प्रोटोटाइप में done नामक एक प्रॉपर्टी जुड़ जाएगी।प्रोटोटाइप श्रृंखला इतनी लंबी होने का कारण यह है कि पिछले फिक्सों में डेवलपर ने __proto__, Arrary.prototype, Object.prototype, Number.prototype और String.prototype को प्रतिबंधित कर दिया था। इसलिए हमें constructor का उपयोग करना पड़ता है, जिसके पास प्रोटोटाइप प्रॉपर्टी है और जो ब्लैकलिस्टेड नहीं है।
एक और उदाहरण है:
npm run hack2
हालाँकि, उपरोक्त दो उदाहरणों में, हम केवल मानों के साथ छेड़छाड़ कर सकते हैं, लेकिन फ़ंक्शन की परिभाषा नहीं।
CVE-2020-7598 (1.2.2) के फिक्स में, और 1.2.3 में डेवलपर ने __proto__, Arrary.prototype, Object.prototype, Number.prototype, String.prototype की जाँच करके कुछ कमज़ोरियों को पहले ही ठीक कर दिया था,
लेकिन वे Function.prototye की जाँच करना भूल गए। इसीलिए यह एक्सप्लॉइट केवल Function की प्रॉपर्टी को प्रभावित कर सकता है।
इस CVE के फिक्स के लिए, डेवलपर ने Function.prototype के साथ-साथ constructor की भी जाँच की: https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73