एक्सएमएल एक्सटर्नल एंटिटी इंजेक्शन (XXE)

OWASP कैटगरी: MASVS-CODE: कोड क्वालिटी

खास जानकारी

एक्सएमएल एक्सटर्नल एंटिटी इंजेक्शन (XXE), एक्सएमएल इनपुट को पार्स करने वाले ऐप्लिकेशन पर किया जाने वाला अटैक है. XXE अटैक तब होता है, जब किसी बाहरी इकाई के रेफ़रंस वाले अविश्वसनीय एक्सएमएल इनपुट को, कम कॉन्फ़िगर किए गए एक्सएमएल पार्सर की मदद से प्रोसेस किया जाता है. इस हमले का इस्तेमाल कई तरह की गतिविधियों के लिए किया जा सकता है. जैसे, सेवा बंद करना, फ़ाइल सिस्टम का ऐक्सेस पाना या डेटा निकालना.

असर

जब कोई ऐप्लिकेशन किसी एक्सएमएल दस्तावेज़ को पार्स करता है, तो वह दस्तावेज़ में मौजूद किसी भी डीटीडी (दस्तावेज़ टाइप डेफ़िनिशन, जिसे बाहरी इकाइयां भी कहा जाता है) को प्रोसेस कर सकता है. कोई हमलावर, डीटीडी के तौर पर नुकसान पहुंचाने वाले कोड को इंजेक्ट करके, इस व्यवहार का गलत इस्तेमाल कर सकता है. इसके बाद, यह कोड डिवाइस के फ़ाइल सिस्टम के उन हिस्सों को ऐक्सेस कर सकता है जिन्हें सिर्फ़ ऐप्लिकेशन ऐक्सेस कर सकता है. साथ ही, इनमें संवेदनशील डेटा भी हो सकता है. इसके अलावा, यह नुकसान पहुंचाने वाला कोड डिवाइस से अनुरोध कर सकता है. इससे, डिवाइस की सुरक्षा से जुड़े उपायों को बायपास किया जा सकता है.

आखिर में, अगर ऐप्लिकेशन डीटीडी को बड़ा करता है, तो इससे रेफ़रंस की गई इकाइयों के कई बार दोहराए जाने की स्थिति पैदा हो सकती है. इससे डिवाइस के रिसॉर्स खत्म हो जाते हैं और सेवा देने में समस्या आती है.

जोखिम कम करने के तरीके

डीटीडी बंद करना

एक्सएक्सई से बचने का सबसे सुरक्षित तरीका यह है कि डीटीडी (बाहरी इकाइयां) को हमेशा पूरी तरह से बंद कर दिया जाए. इस्तेमाल किए जा रहे पार्सर के आधार पर, यह तरीका एक्सएमएल पुल पार्सर लाइब्रेरी के लिए दिए गए इस उदाहरण जैसा हो सकता है:

JavaKotlin
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

डीटीडी बंद करने से, पार्स करने वाले टूल को डिनायल ऑफ़ सर्विस अटैक से भी सुरक्षित रखा जा सकता है. अगर डीटीडी को पूरी तरह से बंद नहीं किया जा सकता, तो बाहरी इकाइयों और बाहरी दस्तावेज़ के टाइप की जानकारी को हर पार्सर के लिए खास तरीके से बंद किया जाना चाहिए.

मार्केट में एक्सएमएल पार्सिंग इंजन की संख्या बहुत ज़्यादा है. इसलिए, एक्सएक्सई हमलों को रोकने के तरीके, इंजन के हिसाब से अलग-अलग होते हैं. ज़्यादा जानकारी के लिए, आपको अपने इंजन के दस्तावेज़ देखने पड़ सकते हैं.

इनपुट सैनिटेशन करें

ऐप्लिकेशन को फिर से कॉन्फ़िगर किया जाना चाहिए, ताकि उपयोगकर्ता एक्सएमएल दस्तावेज़ के शुरुआती हिस्से में मनमुताबिक कोड इंजेक्ट न कर सकें. इसकी पुष्टि, सर्वर-साइड पर करनी होगी, क्योंकि क्लाइंट-साइड कंट्रोल को बायपास किया जा सकता है.

किसी दूसरी लाइब्रेरी का इस्तेमाल करना

अगर इस्तेमाल की गई लाइब्रेरी या तरीके को सुरक्षित तरीके से कॉन्फ़िगर नहीं किया जा सकता, तो किसी दूसरे तरीके का इस्तेमाल किया जाना चाहिए. एक्सएमएल पुल पार्सर और एसएक्स पार्सर, दोनों को सुरक्षित तरीके से कॉन्फ़िगर किया जा सकता है. इसके लिए, डीटीडी और इकाइयों को अनुमति नहीं दी जाती.

संसाधन