
شرح تقني لثغرة CVE-2021-29447، وهي ثغرة XXE في مكتبة وسائط ووردبريس تسمح للمستخدمين الموثقين بتسريب ملفات حساسة عبر تحميل ملفات WAVE ضارة. يتضمن خطوات الاستغلال، تحليل الكود المعرض للخطر، وتفاصيل التصحيح.
يمكن لمستخدم لديه القدرة على رفع ملف WAVE ضار (مثل مؤلف) استغلال مشكلة في تحليل XML في مكتبة الوسائط في ووردبريس مما يؤدي إلى هجمات XXE والتي قد تؤدي إلى كشف نظام الملفات.
ثغرات الكيان الخارجي XML (XXE)
يوفر XML إمكانية تعريف كيانات مخصصة يمكن إعادة استخدامها في جميع أنحاء المستند. ويمكن استخدام ذلك، على سبيل المثال، لتجنب الازدواجية. الكود التالي يعرف كيان myEntity للاستخدام لاحقًا.

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

هجمات XXE تسيء استخدام هذه الميزة. إذا قام مهاجم بتوفير file:///var/www/wp-config.php كـ URI، فسينجح في تسريب محتوى حساس من الملف. وتكون الهجمات ممكنة عند تشغيل محلل XML مهيأ بشكل فضفاض على محتوى يتحكم فيه المستخدم.
XXE في ووردبريس
لدى ووردبريس مكتبة وسائط تتيح للمستخدمين المصادق عليهم رفع ملفات الوسائط التي يمكن استخدامها بعد ذلك في منشورات مدوناتهم. لاستخراج معلومات وصفية من ملفات الوسائط هذه، مثل اسم الفنان أو العنوان، يستخدم ووردبريس مكتبة getID3. يتم تحليل بعض هذه البيانات الوصفية في شكل XML. هنا، تم الإبلاغ عن ثغرة XXE محتملة (السطر 730).

تم إهمال دالة libxml_disable_entity_loader(true) لأن إصدارات PHP 8 تستخدم Libxml2 v2.9+ والتي تعطل جلب الكيانات الخارجية افتراضيًا.
أنشئ ملف WAVE ضار باستخدام الأمر التالي

أنشئ ملف dtd ثم أضف هذا الكود، سيسمح لك ذلك باسترداد ملف wp-config.php الذي يحتوي على بيانات حساسة مثل بيانات اعتماد قاعدة البيانات.

الآن قم بتشغيل خادم http

قم برفع ملف .wav الضار إلى تطبيق ووردبريس. بمجرد رفع ملف .wav، يجب أن ترى الطلب التالي في سجلات خادم HTTP الخاص بك. ملاحظة: لاستخراج البيانات بشكل فعال، استخدم Zlib لفك التشفير.

بعد ذلك ستحصل على بيانات اعتماد قاعدة البيانات، سجل الدخول إلى قاعدة البيانات وحاول العثور على المسؤول

corp-001 هو المسؤول، قم باختراق تجزئة كلمة المرور الخاصة به ثم سجل الدخول كمسؤول

قام ووردبريس بتصحيح الثغرة في الإصدار 5.7.1 من خلال إعادة تقديم الاستدعاء إلى دالة libxml_disable_entity_loader() التي تم إهمالها في PHP 8. لتجنب تحذيرات إهمال PHP، تمت إضافة عامل كبت الأخطاء @ إلى الاستدعاء.

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447