
ओपन सोर्स पैकेज द्वारा tough-cookie 2.5.0 के उपयोग को ठीक करें - CVE-2023-26136,
पैकेज tough-cookie के 4.1.3 से पहले के संस्करण Prototype Pollution के प्रति संवेदनशील हैं, जो CookieJar का उपयोग rejectPublicSuffixes=false मोड में करने पर Cookies के अनुचित हैंडलिंग के कारण होता है। यह समस्या वस्तुओं के प्रारंभ किए जाने के तरीके से उत्पन्न होती है।
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
Prototype Pollution एक भेद्यता है जो JavaScript को प्रभावित करती है। Prototype Pollution का तात्पर्य मौजूदा JavaScript भाषा निर्माण प्रोटोटाइप, जैसे ऑब्जेक्ट्स, में प्रॉपर्टीज़ इंजेक्ट करने की क्षमता से है। JavaScript सभी Object विशेषताओं को बदलने की अनुमति देता है, जिसमें उनकी जादुई विशेषताएँ जैसे proto, constructor और prototype शामिल हैं। एक हमलावर इन विशेषताओं में हेरफेर करता है ताकि JavaScript एप्लिकेशन के आधार ऑब्जेक्ट के ऑब्जेक्ट प्रोटोटाइप को अन्य मान इंजेक्ट करके अधिलेखित या प्रदूषित किया जा सके। Object.prototype पर मौजूद प्रॉपर्टीज़ फिर प्रोटोटाइप श्रृंखला के माध्यम से सभी JavaScript ऑब्जेक्ट्स द्वारा विरासत में मिल जाती हैं। जब ऐसा होता है, तो इससे या तो JavaScript exceptions ट्रिगर करके denial of service होता है, या यह एप्लिकेशन के सोर्स कोड के साथ छेड़छाड़ करता है ताकि हमलावर द्वारा इंजेक्ट किया गया कोड पथ लागू हो, जिससे remote code execution होता है।
प्रोटोटाइप का प्रदूषण होने के दो मुख्य तरीके हैं:
महत्वपूर्ण नोट: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> MemoryCookieStore क्लास में भेद्यता को ठीक करने के लिए, आपको putCookie विधि को संशोधित करने की आवश्यकता है ताकि cookie.domain को proto पर सेट करने पर prototype pollution को रोका जा सके।
https://github.com/salesforce/tough-cookie/pull/283
a. tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js बदलें
memstore.js में नए ऑब्जेक्ट निर्माण की सभी घटनाओं को {} Object.create(Object.prototype) से Object.create(null) में बदल दिया गया है
ताकि हम ऐसे ऑब्जेक्ट इंस्टेंस का उपयोग कर रहे हैं जिनके पास कोई prototype प्रॉपर्टी नहीं होती जिसे प्रदूषित किया जा सके।
b. एक नई फ़ाइल बनाई गई, /node_modules/tough-cookie/lib/test-unit.js वेनिलाजेएस में उपयोग के लिए; इसके लिए यह tests फ़ोल्डर की फ़ाइल cookie_jar_test.js "Issue #282 - Prototype pollution" में पाया गया।
कमांड: node test-unit.js
c. एक नई फ़ाइल बनाई गई, /node_modules/tough-cookie/lib/testVerifyVulnerable.js सत्यापित करें कि संवेदनशील व्यवहार ठीक किया गया था।
कमांड: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. नियमित पैकेज tough-cookie V 2.5.0
कमांड: npm install [email protected] && node index.js
b. परिवर्तनों के साथ tough-cookie V 2.5.0 पैकेज को tgz प्रारूप में संपीड़ित करें
कमांड: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
इस प्रोजेक्ट को कैसे इंस्टॉल करें