defu: `defaults` तर्क में `__proto__` कुंजी के माध्यम से प्रोटोटाइप प्रदूषण
प्लेटफ़ॉर्म
nodejs
कॉम्पोनेन्ट
defu
ठीक किया गया
6.1.5
### प्रभाव ऐसे एप्लिकेशन जो असुरक्षित उपयोगकर्ता इनपुट (जैसे पार्स किए गए JSON अनुरोध निकाय, डेटाबेस रिकॉर्ड, या अविश्वसनीय स्रोतों से कॉन्फ़िग फ़ाइलें) को `defu()` फ़ंक्शन के पहले तर्क के रूप में पास करते हैं, वे प्रोटोटाइप प्रदूषण के प्रति संवेदनशील हैं। एक तैयार पेलोड जिसमें एक `__proto__` कुंजी है, वह मर्ज किए गए परिणाम में इच्छित डिफ़ॉल्ट मानों को ओवरराइड कर सकता है: ```js import { defu } from 'defu' const userInput = JSON.parse('{"__proto__":{"isAdmin":true}}') const config = defu(userInput, { isAdmin: false }) config.isAdmin // true — हमलावर सर्वर डिफ़ॉल्ट को ओवरराइड करता है ``` ### मूल कारण आंतरिक `_defu` फ़ंक्शन ने डिफ़ॉल्ट ऑब्जेक्ट को कॉपी करने के लिए `Object.assign({}, defaults)` का उपयोग किया। `Object.assign` `__proto__` सेटटर को लागू करता है, जो परिणामी ऑब्जेक्ट के `[[Prototype]]` को हमलावर-नियंत्रित मानों से बदल देता है। प्रदूषित प्रोटोटाइप से विरासत में मिली संपत्तियाँ तब `for...in` लूप में मौजूदा `__proto__` कुंजी गार्ड को बायपास करती हैं और अंतिम परिणाम में आ जाती हैं। ### समाधान `Object.assign({}, defaults)` को ऑब्जेक्ट स्प्रेड (`{ ...defaults }`) से बदलें, जो `[[DefineOwnProperty]]` का उपयोग करता है और `__proto__` सेटटर को लागू नहीं करता है। ### प्रभावित संस्करण <= 6.1.4 ### क्रेडिट [@BlackHatExploitation](https:/
कैसे ठीक करें
कोई आधिकारिक पैच उपलब्ध नहीं है। वैकल्पिक समाधान खोजें या अपडेट की निगरानी करें।
अपनी निर्भरताओं की स्वचालित निगरानी करें
जब नई कमज़ोरियाँ आपके प्रोजेक्ट को प्रभावित करें तो अलर्ट पाएं।
मुफ़्त शुरू करें