ميزة الاستيراد عند الغربان تحلل مستند XML ترسله ومحلل XML يسمح بالكيانات الخارجية فتقدر تعرف كيانا يقرأ ملفا من الخادم مثل /etc/passwd
استيراد تغذية الغربان يحلل مستند XML ترسله ويعرض ما قرأه منه المحلل يسمح بالكيانات الخارجية external entities فتستطيع تعريف كيان يقرأ ملفا من الخادم ثم تعرضه في جسم المستند
لماذا نجح الحل
هذا XXE كيانات XML الخارجية محلل XML يقرأ الكيان الخارجي من رابط SYSTEM ويضع محتواه في المستند فالمهاجم يقرأ ملفات الخادم أو يصل لخدمات داخلية الحل: عطل الكيانات الخارجية و DTD في محلل XML (معظم المحللات لها خيار disallow-doctype أو FEATURE_SECURE_PROCESSING) أو استخدم صيغة أبسط مثل JSON لا تدعم الكيانات أصلا
السبب الجذري
المحلل يعالج تعريفات الكيانات الخارجية في DOCTYPE ويحلها من نظام الملفات الجذر تمكين ميزة قديمة خطيرة في محلل XML
كيف يصلح الكود
عطل DTD والكيانات الخارجية أو تخل عن XML لصالح JSON الكيانات ميزة نادرا ما تحتاج
الكود المصاب
const doc = new DOMParser().parseFromString(xml, 'text/xml'); // entities resolved
الكود الآمن
// Disable DTDs and external entities (names vary by library).
const parser = new XMLParser({ resolveExternalEntities: false, processEntities: false });
const doc = parser.parse(xml);
// Or: accept JSON instead of XML.
الأثر في الواقع
XXE يقرأ ملفات حساسة من الخادم وقد يتحول إلى SSRF أو حجب خدمة وأصاب أنظمة استيراد XML كبرى
كيف يكتشفها المدافعون
المدافع يعطل الكيانات الخارجية و DOCTYPE في محلل XML ويرصد مستندات واردة فيها DOCTYPE أو ENTITY