عمليات إدخال عناصر XML الخارجية (XXE)

فئة OWASP: MASVS-CODE: جودة الرمز

نظرة عامة

هجوم حقن كيان XML خارجي (XXE) هو هجوم يستهدف التطبيقات التي تحلّل مدخلات XML. يحدث هجوم XXE عندما تتم معالجة إدخال XML غير موثوق به يتضمّن مرجعًا إلى كيان خارجي من خلال محلّل XML تم ضبطه بشكل غير محكم. يمكن استخدام هذا الهجوم لتنفيذ حوادث متعددة، بما في ذلك رفض الخدمة أو الوصول إلى نظام الملفات أو استخراج البيانات.

التأثير

عندما يحلّل تطبيق مستند XML، يمكنه معالجة أي ملفات DTD (تعريفات أنواع المستندات، والمعروفة أيضًا باسم الكيانات الخارجية) مضمّنة في المستند. يمكن للمهاجم استغلال هذا السلوك من خلال إدخال رمز ضار على شكل تعريفات أنواع المستندات. يمكن لهذا الرمز البرمجي بعد ذلك الوصول إلى أجزاء من نظام الملفات على الجهاز، وهي أجزاء لا يمكن الوصول إليها إلا من خلال التطبيق وقد تحتوي على بيانات حساسة. علاوةً على ذلك، يمكن لهذا الرمز الضار إرسال طلبات من الجهاز، ما قد يؤدي إلى تجاوز إجراءات أمان الحدود.

أخيرًا، إذا كان التطبيق يوسّع تعريفات نوع المستندات (DTD)، يمكن أن يؤدي ذلك إلى إنشاء حالات تتضمّن تكرارات متعددة للعناصر المشار إليها، ما يؤدي إلى استنفاد موارد الجهاز ورفض تقديم الخدمة.

إجراءات التخفيف

إيقاف DTD

إنّ الطريقة الأكثر أمانًا لمنع XXE هي إيقاف تعريفات نوع المستند (الكيانات الخارجية) تمامًا. استنادًا إلى المحلّل المستخدَم، يمكن أن تكون الطريقة مشابهة للمثال التالي الخاص بمكتبة XML Pull Parser:

Java

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

Kotlin

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

يؤدي إيقاف DTDs أيضًا إلى جعل المحلّل اللغوي محميًا من هجمات حجب الخدمة. إذا لم يكن من الممكن إيقاف تعريفات نوع المستند (DTD) تمامًا، يجب إيقاف الكيانات الخارجية وتعريفات أنواع المستندات الخارجية بطريقة خاصة بكل محلّل.

بسبب العدد الكبير من محرّكات تحليل XML المتوفّرة في السوق، تختلف طرق منع هجمات XXE من محرّك إلى آخر. قد تحتاج إلى الرجوع إلى مستندات المحرّك للحصول على مزيد من المعلومات.

تنفيذ عملية تنقيح المدخلات

يجب إعادة ضبط التطبيق لكي لا يسمح للمستخدمين بإدخال رمز عشوائي في مقدّمة مستند XML. يجب التحقّق من ذلك من جهة الخادم، لأنّه يمكن تجاوز عناصر التحكّم من جهة العميل.

استخدام مكتبة مختلفة

إذا تعذّر ضبط المكتبة أو الطريقة المستخدَمة بطريقة آمنة، يجب التفكير في استخدام مكتبة أو طريقة مختلفة. يمكن ضبط كل من XML Pull Parser وSAX Parser بطريقة آمنة، ما يمنع استخدام تعريفات نوع المستندات (DTD) والكيانات.

الموارد