Express Prototype Pollution Gadgets
Serve XSS responses
अधिक जानकारी के लिए मूल शोध पर एक नज़र डालें
JSON सामग्री प्रकार को HTML में बदलें
एक Express ऐप में जो JSON सामग्री प्रकार प्रतिक्रिया का उपयोग कर रहा है और एक JSON को दर्शा रहा है:
इन मामलों में XSS सामान्यतः JSON सामग्री प्रकार के साथ संभव नहीं है। हालाँकि, प्रोटोटाइप प्रदूषण के साथ हम Express को HTML प्रतिक्रिया देने के लिए भ्रमित कर सकते हैं। यह भेद्यता इस पर निर्भर करती है कि एप्लिकेशन res.send(obj)
का उपयोग कर रहा है और एप्लिकेशन/json सामग्री प्रकार के साथ बॉडी पार्सर का उपयोग कर रहा है।
body
और _body
प्रॉपर्टीज़ को polluting करके, Express को HTML कंटेंट टाइप सर्व करने और _body
प्रॉपर्टी को दर्शाने के लिए मजबूर किया जा सकता है, जिससे स्टोर्ड XSS होता है।
Render UTF7
यह संभव है कि express UTF-7 कंटेंट को रेंडर करे:
Safe Scanning Techinques
JSON spaces
निम्नलिखित PP JSON के अंदर विशेषताओं को एक अतिरिक्त स्थान देने के लिए है जो कार्यक्षमता को बाधित नहीं करेगा:
फिर एक परावर्तित JSON इस तरह दिखेगा:
Exposed Headers
निम्नलिखित PP गैजेट सर्वर को HTTP हेडर भेजने के लिए मजबूर करेगा: Access-Control-Expose_headers: foo
यह CORS मॉड्यूल को स्थापित करने की आवश्यकता है
OPTIONS विधि
निम्नलिखित पेलोड के साथ, OPTIONS प्रतिक्रिया से एक विधि को छिपाना संभव है:
स्थिति
निम्नलिखित PP पेलोड का उपयोग करके वापस किए गए स्थिति कोड को बदलना संभव है:
Error
जब आप एक प्राइमिटिव जैसे कि स्ट्रिंग के साथ एक प्रोटोटाइप को असाइन करते हैं, तो यह कोई ऑपरेशन नहीं करता क्योंकि प्रोटोटाइप को एक ऑब्जेक्ट होना चाहिए। यदि आप Object.prototype
को स्वयं एक प्रोटोटाइप ऑब्जेक्ट असाइन करने का प्रयास करते हैं, तो यह एक अपवाद फेंकेगा। हम इन दो व्यवहारों का उपयोग यह पता लगाने के लिए कर सकते हैं कि क्या प्रोटोटाइप प्रदूषण सफल रहा:
Reflected Value
जब एक एप्लिकेशन अपनी प्रतिक्रिया में एक ऑब्जेक्ट शामिल करता है, तो __proto__
के साथ एक असामान्य नाम वाला एट्रिब्यूट बनाना जानकारीपूर्ण हो सकता है। विशेष रूप से, यदि केवल असामान्य एट्रिब्यूट प्रतिक्रिया में लौटाया जाता है, तो यह एप्लिकेशन की कमजोरी को इंगित कर सकता है:
इसके अलावा, उन परिदृश्यों में जहां Lodash जैसी लाइब्रेरी का उपयोग किया जाता है, प्रोटोटाइप प्रदूषण (PP) के माध्यम से और सीधे ऑब्जेक्ट के अंदर एक प्रॉपर्टी सेट करना एक और निदान दृष्टिकोण प्रदान करता है। यदि ऐसी प्रॉपर्टी प्रतिक्रिया से छोड़ी जाती है, तो यह सुझाव देता है कि Lodash लक्ष्य ऑब्जेक्ट में प्रॉपर्टी के अस्तित्व की पुष्टि कर रहा है इससे पहले कि वह मर्ज करे:
Misc
Allow Dots
Express में एक विकल्प है जो आपको क्वेरी स्ट्रिंग पैरामीटर से ऑब्जेक्ट बनाने की अनुमति देता है। आप निश्चित रूप से इसका उपयोग एक बग चेन में प्रोटोटाइप प्रदूषण भेद्यता का लाभ उठाने के लिए कर सकते हैं।
?foo.bar=baz
नोड में एक ऑब्जेक्ट बनाता है।
संदर्भ
Last updated