Research | | 8 min read

Burst Statistics Auth Bypass: 200K Sites at Risk (CVE-2026-8181)

By WP Vanguard Team

Burst Statistics Auth Bypass: 200K Sites at Risk (CVE-2026-8181)

Wordfence blocked more than 7,400 exploitation attempts against the Burst Statistics plugin in a single 24-hour window after disclosure. The bug, tracked as CVE-2026-8181, lets unauthenticated attackers impersonate any administrator over the REST API by guessing the username and supplying literally any password. The plugin has more than 200,000 active installations across WordPress.

The vulnerability scores 9.8 on CVSS. It affects Burst Statistics versions 3.4.0 through 3.4.1.1. The maintainers shipped a fix in 3.4.2 on May 12, 2026, four days after Wordfence's PRISM research platform reported the issue on May 8. If you run Burst Statistics on any version since April 23, update before reading the rest of this post.

What Burst Statistics Is, and Why It Has a MainWP Proxy

Burst Statistics is a privacy-friendly analytics plugin maintained by the same team that makes Really Simple SSL. It tracks visits, sessions, and referrers locally without sending data to Google or a third-party service, which has made it popular with privacy-conscious site owners.

The plugin ships a feature for users of MainWP, the self-hosted multisite management dashboard. The integration lets a MainWP control panel query a child site's statistics through the REST API without operating a separate user session on each site. To make that work, Burst Statistics added a custom authentication path that recognizes MainWP's application-password format in the standard Authorization header.

That custom auth path is where the bug lives. The function is_mainwp_authenticated() in includes/Frontend/class-mainwp-proxy.php was supposed to return true only after a successful credential check. Instead, it returned true when the credential check produced certain error conditions. An attacker who knew an admin's username could send any garbage as the password and the function would still nod and let the request through.

The Bug in One Sentence

The function checked whether wp_authenticate_application_password() returned a WP_Error, and on error it fell through to a code path that treated the request as authenticated. The maintainers intended the inverse: error means reject. The patched 3.4.2 release reverses the polarity and explicitly rejects on any non-user return.

This is the same class of bug that hit a different plugin in late 2023, and it's a textbook example of why "negative auth" patterns are dangerous. Code that says "if not authenticated, deny" is hard to misread. Code that says "if this thing returned an unexpected value, set authenticated to true" hides the failure mode in a corner of the function.

The Exploit Chain

The attack is unauthenticated, network-reachable, and trivially automatable:

  1. The attacker picks a target WordPress site that has Burst Statistics installed in a vulnerable version. This is detectable from the site's loaded scripts or by probing the plugin's REST namespace.
  2. The attacker guesses or scrapes the administrator's username. Most WordPress sites leak this through author archives (/?author=1), the REST /wp-json/wp/v2/users endpoint, or simply because the admin posts under their real name.
  3. The attacker sends a request to any WordPress REST endpoint with a Authorization: Basic <base64(username:anything)> header. Burst Statistics's auth proxy hooks in, hits the bug, and the request continues as if the admin were logged in.
  4. The attacker now has the same REST API capabilities as the impersonated admin. That includes POST /wp-json/wp/v2/users with role: administrator, which creates a new admin account the attacker controls.

Once the rogue admin exists, the original site owner's account becomes optional. The attacker can log in normally, install a PHP backdoor, modify themes, exfiltrate the database, or pivot to other sites that share credentials.

What makes this CVE distinct from the AI Engine MCP token leak we covered last month is the lack of any precondition. AI Engine required the admin to have enabled "No-Auth URL." Burst Statistics required nothing beyond the plugin being installed in a vulnerable version. A fresh install on April 23 was exploitable from the moment it went live.

How to Tell If You Were Hit

Run these checks in order. They take about five minutes total and don't require shell access.

1. List all administrator accounts and verify each one.

wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Pay special attention to accounts registered after April 23, 2026. Cross-check the email addresses against ones you recognize. An attacker building persistence usually creates an account that looks plausible at a glance: wp_admin, backup_user, sysadmin, or a name that resembles a real team member.

2. Audit application passwords on every admin account.

wp user application-password list <user_id>

If an admin has application passwords they didn't create, revoke all of them and rotate the user's main password.

3. Check REST API access logs for unusual wp/v2/users POSTs.

If you have access logs going back to April 23, search for any POST request to /wp-json/wp/v2/users from an IP you don't recognize. Successful exploitation usually shows up as a single user-creation request, often followed within minutes by a login from the same IP.

4. Look for the signs your WordPress site has been hacked.

New cron jobs, modified core files, unfamiliar plugins, outbound traffic to unusual hosts, search engine penalties. If any of these are present, treat the site as compromised and run a full malware removal sweep.

The PRISM Angle

This particular CVE is interesting beyond the technical bug. Wordfence's autonomous vulnerability research platform, PRISM, found the bug on May 8, 15 days after the vulnerable code shipped on April 23. The patch was out four days later. That's a 19-day window between bug introduction and fix, compared to the typical 60-to-180-day window for community-reported WordPress plugin vulnerabilities.

The interesting part is not that an AI system found a bug. Static analyzers have caught simpler issues for years. What's new is that PRISM's findings are landing on the same triage queues that human researchers feed into, at a rate that compresses the attacker's exploitation window. CVE-2026-8181 was likely going to be exploited in the wild eventually. The 7,400 attacks Wordfence blocked in the first 24 hours suggest several attacker groups had it ready. With a 19-day fix cycle, the window where most sites are still vulnerable is meaningfully smaller than it would have been a year ago.

The flip side is that defenders need to keep pace. A 19-day disclose-to-patch cycle is only useful if you actually update within that window. Sites that update once a quarter are still exposed for weeks; sites that update once a year are sitting ducks.

How to Patch

Three steps, in order:

1. Update Burst Statistics to 3.4.2.

wp plugin update burst-statistics --version=3.4.2
# or
wp plugin update burst-statistics

If you can't update immediately (staging conflicts, change-control freezes), deactivate the plugin. Losing analytics for a day is cheap. A new admin account dropped onto your site is not.

2. Rotate every admin password.

Even if you found nothing in step 1's audit, the bug allowed silent REST-API access. Anything an admin could read through the API may already be exposed. Rotate passwords, regenerate application passwords, and reset WordPress salt keys in wp-config.php.

3. Run a full security scan.

Run an automated security scan that includes user-table auditing, modified-core-file detection, and webshell scanning. The exploit window was three weeks. If your site was probed during that window and you can't rule out admin-account creation through log review alone, treat the scan as your second line of defense.

What This Means If You Manage Multiple Sites

If you run more than five WordPress installs, the practical question isn't "should I patch Burst Statistics on the site I remember." It's "do I have an inventory I trust." The plugin's MainWP integration exists precisely because operators of 20, 50, or 500 sites can't manually patch each one.

Two operational changes pay off here. First, scan every site you manage weekly, not just the ones you actively use. Many compromised WordPress installs were "set and forget" sites that nobody checked between launch and breach. Second, keep an inventory of installed plugins per site so a future CVE like this one becomes a five-minute query, not a half-day audit. The WP Vanguard Partner API gives agencies a single endpoint for both jobs.

References

burst-statistics cve-2026-8181 authentication-bypass mainwp rest-api wordpress-vulnerability

Check Your WordPress Site Security

Free scan, no login required. Find vulnerabilities before attackers do.

Scan Your Site Free

Get weekly WordPress security tips

Vulnerability alerts, plugin updates, and security guides. No spam. Unsubscribe any time.

← Back to Blog