رأس القلم
كالي
ل AMD64
ماك
ل ARM64
ماك
قريباً
النوافذ
قريباً

شرح حقن XML: المخاطر، والهجمات الحقيقية، ودليل الدفاع الكامل

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

على عكس التلاعب البسيط في المدخلات، يستغل حقن XML القوة التعبيرية لـ XML نفسه، مما يؤثر على الأنظمة المعقدة بما في ذلك SOAP وSAML وأجهزة إنترنت الأشياء وتكامل المؤسسات والأنظمة المالية القديمة.

لماذا لا يزال حقن XML مهمًا

على الرغم من هيمنة JSON على التطبيقات الحديثة، إلا أن XML مدمج بعمق في برمجيات المؤسسات وبروتوكولات المصادقة والتكاملات الخلفية. يمكن للمهاجمين إساءة استخدام هياكل XML من أجل:

  • العبث بمنطق العمل
  • حقن العقد غير المصرح بها
  • معالجة استعلامات XPath
  • تشغيل الكشف عن الملفات على غرار XXE
  • كسر التحقق من صحة المخطط
  • التسبب في الحرمان من الخدمة المستند إلى XML

مرونة XML تجعل إساءة استخدامه قوية بشكل خاص.

مثال حقيقي لـ CVE CVE-2025-13526

يوضّح CVE-2025-13526 كيف يمكن أن يؤدي خطأ بسيط في تحليل XML إلى الكشف عن ملف كامل. حيث سمح النظام بتحميل ملفات تكوين XML، ولكنه فشل في تعطيل تحليل الكيانات الخارجية.

مثال على الحمولة الخبيثة:

xml

<!DOCTYPE بيانات [

] <>

&xxe;

أعاد الخادم محتويات /etc/passwdيوضح كيف يمكن لـ XML Injection مع XXE أن يكشف الملفات الحرجة.

أسطح الهجوم لحقن XML

إساءة معاملة المهاجمين

  • حقن العقدة
  • حقن السمة
  • معالجة استعلام XPath
  • التلاعب في المخطط (XSD)
  • الحمولات XXE
  • توسيع الكيانات لـ DoS
  • تجاوز المنطق داخل تدفقات العمل المستندة إلى XML

تؤثر كل فئة على طبقة مختلفة من النظام.

أمثلة الهجوم (نفس الكمية المحفوظة)

  1. معالجة حقن العقدة الحقن

xml

<منتج أ</منتج أ</طلب

الحمولة المحقونة:

بي جي إس كيو إس كيو إل

true

يصبح XML الناتج تالفًا هيكليًا وقد يمنح امتيازات غير مصرح بها.

حقن XPath

بايثون

الاستعلام = f"//المستخدمون/المستخدمون/المستخدمون[اسم المستخدم/النص() ='{المستخدم}'']"

المدخلات الخبيثة

باش

' أو '1'='1

هذا يكشف سجلات المستخدمين غير المصرح لهم.

الحمولة XXE Payload

xml

<!DOCTYPE foo [

] &Payload;

التلاعب بالمخطط

xml

<xs:element name="amount" type="xs:string"/>

هذا يعطل سلوك التحقق من الصحة المتوقع.

مليار ضحكة ضحكة دوس

xml

<!ENTITY a "ha"><!ENTITY b "&a;&a;"><!ENTITY c "&b;&b;">

يؤدي التوسيع الهائل إلى زيادة التحميل الزائد على المُحلل.

التقنيات الدفاعية

تعطيل قرار الكيان المعطل

بايثون

المحلل اللغوي = etree.XMLParser(resolve_entities=False, no_network=True)

استخدام المكتبات الآمنة

بايثون

استيراد defusedxml.ElementTree ك ET

التحقق من صحة المخطط القوي

بايثون

schema.validate(input_xml)

لا تسلسل سلاسل XML أبدًا

نهج أكثر أماناً:

بايثون

el = العنصر("المستخدم") name_tag.text = user_input

جدول المقارنة

النوعالهدفالخطورةالتأثير
حقن XMLالتلاعب بالبنيةمتوسط-عاليتجاوز المنطق
حقن XPathالتحكم في الاستعلامعاليةالوصول غير المصرح به
XXEإساءة استخدام المحلل التحليليعاليةقراءة الملف / SSRF
حقن المخططتجاوز التحقق من الصحةمتوسطمخاطر النزاهة
حقن XML

حقن XML في اختبار الاختراق الآلي

تعمل منصات اختبار الاختراق الحديثة القائمة على الذكاء الاصطناعي - مثل Penligent - على إجراء طفرة في البنية و XML، واختبار حمولة XPath، واختبار حمولة XPath، واكتشاف التهيئة الخاطئة للمحلل. هذه المنصات:

  • اكتشاف أسطح الهجوم المستندة إلى XML
  • تحديد نقاط الحقن
  • سلوك مخطط التعلم التلقائي
  • توليد حمولات متكيفة
  • التحقق من صحة سلوك المحلل التحليلي في ظل تكوينات متعددة

يؤدي ذلك إلى توسيع نطاق تغطية الكشف بشكل كبير.

خطوط الأساس الأمنية وتوصيات الإصلاح الآلي

يمكن أن توفر المنصات الآلية أيضاً:

  • تدقيقات تكوين المحلل التحليلي
  • الكشف عن مكتبات XML غير الآمنة
  • التحقق من إعدادات دقة الكيان
  • تطبيق التحقق الصارم من صحة XSD
  • حظر عمليات CI/CDD لعمليات XML غير الآمنة

وهذا يحول الاكتشاف إلى معالجة قابلة للتنفيذ.

سيناريو للمثال

قواعد Semgrep - حقن Python XML / XXE / تحليل غير آمن

إنشاء ملف:

semgrep-rules/python-xml-injection.yaml

يمل

'القواعد:

القاعدة 1: الاستخدام غير الآمن لـ xml.etree - المحلل الافتراضي عرضة لـ XXE

  • المُعرّف: python-unsafe-xml-etree severity: رسالة الخطأ: | xml.etree.ElementTree غير آمن ل XML غير موثوق به. لا يقوم بتعطيل توسيع الكيان الخارجي افتراضيًا. استخدم defusedxml بدلاً من ذلك. بيانات التعريف: cwe: "CWE-611" owasp: "A04:2021 الكيانات الخارجية لـ XML" الأنماط:
    • النمط: | استيراد xml.etree.ElementTree كلغة ET: [بايثون]

القاعدة 2: الاستخدام المباشر لـ xml.dom.minidom - محلل XML غير الآمن

  • المُعرّف: python-unsafe-xml-minidom severity: رسالة الخطأ: |لا يقوم xml.dom.minidom بتعطيل DTDs أو توسيع ENTITY. لا تستخدمه مع XML غير موثوق به. بيانات التعريف: cwe: نمط "CWE-611": |استيراد xml.dom.minidom اللغات: [بايثون]

القاعدة 3: مُحلل lxml XMLParser الخطير مع resol_entities=صحيح

  • المعرف: python-lxml-resolve-entities-enentities-enverity: رسالة الخطأ: | lxml XMLParser() مع resol_entities=صحيح يمكّن XXE. قم بتعيين resol_entities=False و load_dtd=False. البيانات الوصفية: cwe: نمط "CWE-611": |محلل XMLParser(resol_entities=صحيح، ...) اللغات: [بايثون]

القاعدة 4: lxml مع load_dtd=صحيح - خطير

  • المعرف: python-lxml-لإكسمل-تحميل-ديتد، شدة: رسالة تحذير: | load_dtd=صحيح يتيح معالجة DTD وقد يسمح بتوسيع الكيان. تعطيل ما لم يكن مطلوبًا تمامًا. البيانات الوصفية: cwe: نمط "CWE-611": |محلل XMLParser(load_dtd=صحيح، ...) اللغات: [بايثون]

القاعدة 5: تكوين المحلل الآمن المفقود عند استخدام lxml.fromstring()

  • المعرف: python-lxml-fromstring-no-safeconfig severity: رسالة تحذير: | lxml.fromstring() تم استدعاؤه بدون محلل XMLParser المقوى. تأكد من أن resol_entities=False, no_network=صحيح. البيانات الوصفية: cwe: أنماط "CWE-611":
    • النمط: | من lxml استيراد etree - النمط: | etree.fromstring($XML) اللغات: [بايثون]

القاعدة 6: عدم استخدام defusedxml عند تحليل XML الخارجي

  • المعرف: python-defusedxml-لا-مستعمل الشدة: رسالة INFO: | استخدام مفقود لـ defusedxml، موصى به لتحليل XML الآمن في Python. البيانات الوصفية: cwe: "CWE-611" نمط-إما:
    • نمــط | etree.parse($X) - النمط: | etree.parse($X) اللغات: [بايثون]

القاعدة 7: xmltodict بدون إجبار المحلل اللغوي المعزول

  • المعرف: python-xmltodict-unsafe شدة: رسالة تحذير: |يمكن لـ xmltodict استدعاء محلل XML أساسي يسمح بـ XXE. استخدم defusedxml المحلل اللغوي بدلاً من ذلك. النمط: | xmltodict.parse($X) اللغات: [بايثون]

القاعدة 8: الاستخدام الخطير ل eval() على المدخلات المشتقة من XML

  • المعرف: python-eval-from-xml severity: رسالة حرجة: | eval() على المدخلات المشتقة من XML قد يؤدي إلى RCE. لا تقم أبدًا بتقييم قيم XML المحللة مباشرةً. بيانات التعريف: cwe: "CWE-95" owasp: "A03:2021 حقن" الأنماط:
    • نمــط | $VAL = $XML.xpath(...) - النمط: | eval($VAL) اللغات: [بايثون]

القاعدة 9: مخلل غير آمن يتم تحميله على بيانات مصدرها XML

  • المعرف: python-pickle-on-xml severity: رسالة حرجة: | يمكن أن يؤدي pickle.loads() على المدخلات المشتقة من XML إلى تنفيذ تعليمات برمجية عشوائية. تجنب المخلل على بيانات المستخدم. البيانات الوصفية: cwe: أنماط "CWE-502":
    • النمط: | $DATA = etree.fromstring(...) - النمط: | pickle.loads.loads($DATA) اللغات: [python]|

ماسح ضوئي كامل من بايثون SAST

هذا يكمل Semgrep من خلال البحث عن الأنماط الخطرة بما في ذلك:

  • واردات محلل XML غير الآمنة
  • ENTITY / DOCTYPE الاستخدام
  • التقييم, التنفيذ, مخلل, مارشال, تحميل yaml.load الأنماط
  • مشغلات XXE في .xml, .xsd, .wsdl الملفات

ابتكر: python_sast_scanner.py

بايثون

''#!/usr/bin/env python3"" python_sast_scanner.py ماسح ضوئي خفيف الوزن وسريع خاص بـ Python SAST متخصص في:

  • حقن XML / XXE
  • استخدام المحلل التحليلي غير الآمن
  • الدوال الخطرة (eval، exec، pickle.loads، yaml.load) آمنة للمعلومات السرية؛ لا تنفذ أي شيفرة. يُخرج JSON وخروج غير صفري عند النتائج. """"استيراد os، re، json، sys PATTERNS = {# XML/XXE "xml_etree": r"import\s+xml\.etree\.ElementTree"، "xml_minidom": r"import\s+xml\.dom\.dom\.minidom"، "lxml_resolve_entities": r"resol_entities\s*=\sTrue","lxml_load_dtd": r"load_dtd\s=\s*صحيح"، "doctype_in_xml": r"<!DOCTYPE"، "entity_in_xml": r"<!ENTITY",
حقن XML PoC بنقرة واحدة

الوظائف الخطرة

"eval_usage": r"\\beval\\s*\\(","exec_usage": r"\\bexec\\s*\\(","pickle_loads": r"pickle\\.loads\\s*\\(","marshal_loads": r"marshal\\.loads\\s*\\(","yaml_unsafe_load": r"yaml\\.load\\s*\\(",

} IGNORED = {".git"، "venv"، "env"، "env"، "pycache"، "dist"، "build"، "node_modules"} تعريف مسح ملف (مسار): النتائج = []، حاول: مع فتح (مسار، "r"، ترميز = "utf-8″، أخطاء = "تجاهل") ك f: ل i، سطر في تعداد (f، 1): للقاعدة، regex في PATTERNS.items():إذا كانت re.search(regex, line): النتائج.append({"rule": rule,"line": line.strip(),"lineno": i, })باستثناء الاستثناء:تمرير إرجاع النتائج def walk(root="."): النتائج={}بالنسبة ل dp, dirs, files في os.walk(الجذر): dirs[:] = [d ل d في dirs إذا لم يكن d في IGNORED] ل f في الملفات:إذا كان f.endswith((".py",".xml",".xml",".xsd",".wsdl")): full = os.path.path.join(dp, f) hits = scanfile(full)إذا كانت النتائج: results[full] = hitsreturn results def main(): root = sys.argv[1] إذا كان len(sys.argv)>1 وإلا "." النتائج = المشي(الجذر)طباعة(json.dumps({"النتائج": النتائج، "file_count": len(results)}، المسافة البادئة=2))إذا كانت النتائج: sys.exit(3) sys.exit(0) إذا كان الاسم = "main": main()

ما الذي يغطيه هذا - نطاق بايثون SAST

حقن XML / XXE

✔محللي XML غير الآمنين ✔محللي XML غير الآمنين ✔ lxml مع حل_الكيانات=صحيح ✔ تحميل DTD (يحتمل أن يكون خطيرًا) ✔ علامات XXE في ملفات XML المخزنة

حقن الكود

eval()تنفيذ()

إلغاء التسلسل غير الآمن

تحميل المخلل()مارشال.الأحمال() ✔ غير آمن yaml.load()

أنماط أخرى غير آمنة

✔ ENTITY / DOCTYPE في .xml, .xsd, .wsdl ✔ xmltodict بدون محلل تحليلي مقوى

الخاتمة

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

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

فلتر جافا سكريبت لمهندسي الأمن: خطوط الأنابيب الحتمية، عدد أقل من الإيجابيات الكاذبة، والقضاء على خرافات "الفلتر كمطهر"

فلتر() لمهندسي الأمن: خطوط الأنابيب الحتمية، عدد أقل من الإيجابيات الكاذبة، وانعدام خرافات "الفلتر كمطهر" إذا بحثت عن "فلتر جافا سكريبت"، فالاحتمالات

قراءة المزيد