
इस रिपॉज़िटरी में CVE-2023-26136 भेद्यता के लिए एक समाधान शामिल है।
पैकेज tough-cookie के 4.1.3 से पहले के संस्करण rejectPublicSuffixes=false मोड में CookieJar का उपयोग करते समय कुकीज़ के अनुचित संचालन के कारण प्रोटोटाइप प्रदूषण के प्रति संवेदनशील हैं। यह समस्या वस्तुओं को आरंभ करने के तरीके से उत्पन्न होती है।
इस परियोजना का उद्देश्य [email protected] का एक पैच किया गया संस्करण प्रदान करना है जो CVE-2023-26136 भेद्यता को समाप्त करता है और पिछड़ी अनुकूलता सुनिश्चित करता है।
भेद्यता को ठीक करने के लिए, हमने memstore.js को संशोधित किया ताकि मानक वस्तु आरंभीकरण को Object.create(null) से बदलकर कुकीज़ को प्रोटोटाइप प्रदूषण जोखिमों के बिना एक ऑब्जेक्ट में संग्रहीत किया जा सके। यह दुर्भावनापूर्ण तरीके से तैयार किए गए कुकी नामों के माध्यम से प्रोटोटाइप हेरफेर को रोकता है।
tough-cookie/ निर्देशिका में, हम tough-cookie के मूल और पैच किए गए संस्करणों वाली दो अतिरिक्त निर्देशिकाएँ पा सकते हैं:
Original v2.5.0/) – अपरिवर्तित tough-cookie 2.5.0, जो संवेदनशील है।v2.5.0-PATCHED/) – एक संशोधित संस्करण जिसमें CVE-2023-26136 के लिए समाधान शामिल है।मूल संवेदनशील संस्करण स्थापित करने के लिए:
npm install [email protected]
लागू किया गया पैच कुकीज़ को संग्रहीत करने के तरीके को बदलता है: this.idx = {}; को बदल दिया गया: this.idx = Object.create(null);
यह हमलावरों को प्रोटोटाइप श्रृंखला में गुणों को इंजेक्ट करने और भेद्यता का शोषण करने से रोकता है।
tough-cookie (CVE-2023-26136) में भेद्यता कुकीज़ को संग्रहीत करने के लिए एक सादे जावास्क्रिप्ट ऑब्जेक्ट {} के उपयोग के कारण उत्पन्न होती है। चूंकि {} Object.prototype से विरासत में मिलता है, इसका उपयोग proto जैसे गुणों को इंजेक्ट करके शोषण किया जा सकता है, जिससे प्रोटोटाइप प्रदूषण होता है। यह एक हमलावर को एप्लिकेशन व्यवहार में हेरफेर करने या सुरक्षा समस्याएँ पैदा करने की अनुमति दे सकता है।
इसे कम करने के लिए, पैच {} को Object.create(null) से बदल देता है, जो बिना प्रोटोटाइप ([[Prototype]]: null) वाली एक वस्तु बनाता है। यह सुनिश्चित करता है कि वस्तु Object.prototype से कोई गुण प्राप्त न करे, जिससे हमलावरों को दुर्भावनापूर्ण गुणों को इंजेक्ट करने से रोका जा सके।
Object.create(null) का उपयोग करके, हम कुकी स्टोर को अनपेक्षित प्रोटोटाइप विरासत से प्रभावी रूप से अलग करते हैं, जिससे यह प्रोटोटाइप प्रदूषण हमलों के खिलाफ सुरक्षित हो जाता है।
पैच किए गए संस्करण को स्थानीय रूप से स्थापित करने के लिए, इन चरणों का पालन करें:
tar -tzf tough-cookie-2.5.0.tgz
यदि आवश्यक हो, तो इसे निकालें:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
अपेक्षित आउटपुट:
EXPLOITED SUCCESSFULLY - मूल संस्करण के लिए
EXPLOIT FAILED - पैच किए गए संस्करण के लिए
पैच किए गए संस्करण का परीक्षण Node.js 20 (LTS) पर किया गया है ताकि नवीनतम स्थिर रनटाइम वातावरण के साथ अनुकूलता सुनिश्चित की जा सके।
मूल tough-cookie रिपॉजिटरी (Salesforce) वर्तमान में संस्करण 5.1.1 पर है। चूंकि हम संस्करण 2.5.0 के साथ काम कर रहे हैं, मुख्य रिपॉजिटरी से सीधा फोर्क संभव नहीं है। इसके बजाय, हमने मूल और पैच किए गए दोनों संस्करणों वाली एक अलग रिपॉजिटरी बनाई। आप इसे यहाँ पा सकते हैं:
GitHub रिपॉजिटरी - फोर्क किया गया संस्करण
अधिक जानकारी के लिए, आधिकारिक CVE पृष्ठ पर जाएँ: CVE-2023-26136 - NVD