تم اكتشاف ثغرة أمنية حرجة في مكتبة C++ libxml2: تهديد لآلاف المشاريع
أثار مجتمع مطوري C++ القلق بعد أخبار اكتشاف ثغرة أمنية حرجة في المكتبة واسعة الاستخدام libxml2. هذه المكتبة، التي تُعتبر المعيار الفعلي لتحليل مستندات XML في مشاريع C و C++، تُستخدم في أنظمة التشغيل Linux و macOS ومتصفحات الويب وحزم المكاتب وعدد لا يحصى من البرامج التطبيقية. الثغرة، التي حصلت على المعرف CVE-2024-XXXX (تم تعيين الرقم، التفاصيل قيد الانتظار)، تسمح للمهاجم بتنفيذ كود عشوائي على النظام المستهدف.
جوهر المشكلة
اكتشف باحثون من فريق Project Zero أن الخطأ يكمن في آلية معالجة الكيانات (entities) المتكررة في مستندات XML. عند معالجة ملف XML مُعد خصيصًا يحتوي على مراجع متداخلة لكيانات خارجية، يحدث تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow). يؤدي هذا إلى تلف الذاكرة، واعتمادًا على حزمة الحماية، إلى إمكانية تنفيذ كود عشوائي بصلاحيات العملية الحالية.
خصوصية هذه الثغرة هي أن الهجوم ممكن حتى بدون تفعيل خيار توسيع الكيانات (XML_PARSE_NOENT). التحليل القياسي باستخدام الدوال xmlReadFile() أو xmlParseDoc() يصبح عرضة للخطر إذا كان مستند XML المُدخل يحتوي على بنية خبيثة.
من هو المعرض للخطر؟
قائمة المشاريع التي تستخدم libxml2 ضخمة. تحت التهديد المباشر توجد:
- المتصفحات: Chrome (عبر تحليل SVG و XHTML)، Safari، Firefox، بالإضافة إلى مشتقاتها.
- لغات البرمجة: Python (مكتبة lxml)، Ruby (libxml-ruby)، PHP (امتداد DOM/SimpleXML).
- الأدوات النظامية: مديري الحزم (apt, yum)، أنظمة البناء (CMake, Meson) وأدوات التهيئة.
- حزم المكاتب: LibreOffice، OpenOffice (لاستيراد المستندات بتنسيقات ODF، DOCX).
توصيات الحماية
يُنصح بشدة مطوري C++ ومسؤولي الأنظمة باتخاذ الخطوات التالية:
- تحديث المكتبة: قم بتحديث libxml2 فورًا إلى الإصدار 2.13.2 أو أحدث. تم إصدار التصحيح بالفعل في المستودع الرسمي.
- التحقق من التبعيات: إذا كنت تستخدم مدير حزم (vcpkg, Conan)، قم بتنفيذ
vcpkg upgrade libxml2أو أمر مشابه لمدير الحزم الخاص بك. - تفعيل الحماية (sandbox): بالنسبة لتطبيقات الخادم التي تحلل XML من المستخدمين، يُوصى بتشغيل المحلل في بيئة معزولة (chroot, Docker) بأقل الصلاحيات.
- تعطيل الوظائف غير المستخدمة: في الكود، استخدم
xmlCtxtUseOptions(parser_ctxt, XML_PARSE_HUGE | XML_PARSE_NOENT | XML_PARSE_DTDLOAD)فقط عند الضرورة القصوى.
بالإضافة إلى ذلك، لتعزيز الأمان، يمكن تنفيذ التحقق المسبق من مستندات XML باستخدام مخطط DTD. ومع ذلك، هذا ليس حماية كاملة من هذه الثغرة المحددة - فقط التحديث إلى أحدث إصدار يضمن الأمان.