Express Prototype Pollution Gadgets
Serve XSS responses
अधिक विवरण के लिए मूल अनुसंधान को देखें
Change JSON content-type to HTML
एक Express ऐप में JSON content type response का उपयोग करते हुए और एक JSON को प्रतिबिंबित करते हुए:
इन मामलों में XSS एक JSON सामग्री प्रकार के साथ सामान्य रूप से संभव नहीं है। हालांकि, प्रोटोटाइप पोल्यूशन के साथ हम Express को एक HTML प्रतिक्रिया प्रदान करने के लिए गड़बड़ा सकते हैं। यह सुरक्षा दोष उन अनुप्रयोगों पर निर्भर करता है जो res.send(obj)
का उपयोग कर रहे हैं और एप्लिकेशन/json सामग्री प्रकार के साथ बॉडी पार्सर का उपयोग कर रहे हैं।
प्रदूषण करके body
और _body
गुणों को दूषित करने से, Express को HTML सामग्री प्रकार की सेवा करने और _body गुण को प्रकट करने में सक्षम है, जिससे स्थायी XSS हो सकता है।
यूटीएफ-7 रेंडर करें
Express को यूटीएफ-7 सामग्री रेंडर करना संभव है:
सुरक्षित स्कैनिंग तकनीक
JSON अंतरिक्ष
निम्नलिखित PP एक JSON के अंदर विशेष अंतरिक्ष वाले गुण बनाएगा जो कार्यक्षमता को नहीं तोड़ेगा:
फिर एक परावर्तित JSON इस तरह दिखेगा:
उजागरित हेडर
निम्नलिखित PP गैजेट सर्वर को वापस HTTP हेडर भेजने के लिए बनाएगा: Access-Control-Expose_headers: foo
इसे CORS मॉड्यूल को स्थापित किया जाना चाहिए
OPTIONS विधि
निम्नलिखित पेलोड के साथ, OPTIONS प्रतिक्रिया से एक विधि छुपाना संभव है:
स्थिति
निम्नलिखित PP पेलोड का उपयोग करके वापसी स्थिति कोड बदलना संभव है:
त्रुटि
जब आप एक प्रोटोटाइप को एक प्राथमिक जैसे कि एक स्ट्रिंग के साथ असाइन करते हैं, तो यह एक नो-ऑप ऑपरेशन उत्पन्न करता है क्योंकि प्रोटोटाइप को एक ऑब्जेक्ट होना चाहिए। यदि आप Object.prototype
को प्रोटोटाइप ऑब्जेक्ट असाइन करने का प्रयास करते हैं, तो यह एक अपवाद फेंकेगा। हम इन दो व्यवहारों का उपयोग कर सकते हैं ताकि हम यह जांच सकें कि क्या प्रोटोटाइप पोल्लूशन सफल रहा है:
प्रतिबिंबित मान
जब एक एप्लिकेशन अपने प्रतिक्रिया में एक ऑब्जेक्ट शामिल करता है, तो __proto__
के साथ असामान्य नाम के एट्रिब्यूट बनाना देखने लायक हो सकता है। विशेष रूप से, अगर केवल असामान्य एट्रिब्यूट ही प्रतिक्रिया में वापस किया जाता है, तो यह एप्लिकेशन की कमजोरी का संकेत हो सकता है:
इसके अतिरिक्त, ऐसे परिदृश्यों में जहाँ एक पुस्तकालय जैसे Lodash का उपयोग किया जाता है, प्रोटोटाइप प्रदूषण (PP) के माध्यम से और सीधे वस्तु के अंदर एक संपत्ति सेट करना एक और नैदानिक पहुंच प्रदान करता है। यदि ऐसी कोई संपत्ति प्रतिसाद से छूट जाती है, तो यह सुझाव देता है कि Lodash लक्षित वस्तु में संपत्ति की मौजूदगी की पुष्टि कर रहा है पहले से पहले मिलाने से:
विविध
डॉट्स की अनुमति
Express में एक विकल्प है जो आपको **क्वेरी स्ट्रिंग पैरामीटर से ऑब्ज
?foo.bar=baz
नोड में एक ऑब्जेक्ट बनाता है।
संदर्भ
Last updated