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

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

نظرة عامة

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

التأثير

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

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

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

إيقاف ملفات DTD

الطريقة الأكثر أمانًا لمنع XXE هي إيقاف DTD (الكيانات الخارجية) بشكل كامل دائمًا. استنادًا إلى منظِّم التحليل المستخدَم، قد تكون الطريقة مشابهة للمثال التالي لمكتبة 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)

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

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

إجراء تنقيح المدخلات

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

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

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

المراجع