تخط إلى المحتوى
English

XXE (XML External Entities)

كيف يتيح محلل XML الذي يحل الكيانات الخارجية للمهاجم قراءة ملفات الخادم والوصول لخدمات داخلية ولماذا تعطيل الكيانات هو الحل الوحيد

المسار
أمن الويب
الوقت المتوقع
25 د
المستوى
متوسط
تقدمك في المسار0%

قبل هذا الدرس

XML يقدر يعرف كيانات أسماء تنوب عن نص مثل & ويسمح أيضا بكيانات خارجية قيمتها تحمل من رابط يحدده المستند لو حلل الخادم XML من المهاجم والكيانات الخارجية مفعلة فالمهاجم يعرف كيانا يشير لملف في الخادم أو رابط داخلي فيجلبه المحلل ويضع محتواه في المستند

ما هي الثغرة؟

malicious.xml
<!DOCTYPE r [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<r>&xxe;</r>

التعريف <!ENTITY ... SYSTEM "url"> يعرف كيانا خارجيا و &xxe; يشير إليه المحلل المعطوب يحل file:///etc/passwd فيصبح المستند <r>root:x:0:0:...</r> ميزة الاستيراد قرأت لك ملف خادم

ليش تصير؟

الكيانات الخارجية ميزة XML قديمة مفعلة افتراضيا في محللات كثيرة ولا يحتاجها أي تطبيق تقريبا لما يثق المحلل بالمستند ليخبره بما يحمل فإن XML المهاجم يخبره بتحميل الأسرار

أبعد من قراءة الملفات

  • منع كلمة امنع SYSTEM وتبقى PUBLIC تعرف كيانا خارجيا برابط القائمة السوداء للكلمات ناقصة وتتجاوزها في اللاب المتوسط
  • XXE يصبح SSRF امنع file:// ويبقى كيان http:// يصل للشبكة فيتحول XXE إلى تزوير طلب من جهة الخادم الخادم يجلب رابطا تختاره فيصل لخدمات داخلية يراها ولا تراها أنت فيجلب الخادم روابط داخلية ومنها خدمة بيانات السحابة وتفعل هذا بالضبط في اللاب الصعب

كيف تنحمى منها

safe.js
// Disable DTDs and external entities entirely (option names vary by library).
const parser = new XMLParser({ resolveExternalEntities: false, processEntities: false });
parser.parse(xml);
// Or simply accept JSON, which has no entities at all.

عطل معالجة DTD وحل الكيانات الخارجية في المحلل ولا تحاول فلترة الكلمات أو البروتوكولات فدائما يوجد غيرها وإذا لم تحتج XML فاستخدم JSON واعزل الخدمة شبكيا حتى لو حدث SSRF عبر XXE لا يصل شيئا حساسا

سؤال مراجعةخادم يمنع أي XML فيه SYSTEM لإيقاف XXE هل يكفي؟

اللابات

  • كيان خارجي يقرأ ملفا

    سهللاب في المتصفح

    عرف كيانا خارجيا يقرأ /etc/passwd واجعل المستند يعرض محتواه

  • يمنع كلمة واحدة

    متوسطلاب في المتصفح

    اقرأ /etc/passwd مرة أخرى متجاوزا منع SYSTEM

  • كيان يصل للشبكة

    صعبلاب في المتصفح

    استخدم كيان XML خارجيا عبر http للوصول لخدمة بيانات السحابة وسرقة مفاتيح الوصول