
Laboratorio de vulnerabilidades: MainWP Dashboard <= 3.1.2 XSS almacenado no autenticado
Laboratorio vulnerable para CVE-2016-15041: XSS almacenado no autenticado en el plugin de WordPress MainWP Dashboard <= 3.1.2.
docker compose up -d --build
Espere ~30 segundos para la configuración automática. El laboratorio muestra un banner cuando está listo:
docker compose logs -f wordpress
| Recurso | URL / Credenciales |
|---|
| WordPress | http://localhost:8088 |
| Inicio de sesión de administrador | admin / admin123 |
| Endpoint vulnerable | http://localhost:8088/wp-admin/admin-post.php?page=mainwp-setup&step=purchase_extension |
Nuclei:
nuclei -t https://raw.githubusercontent.com/projectdiscovery/nuclei-templates/main/http/cves/2016/CVE-2016-15041.yaml -u http://localhost:8088
PoC manual:
./scripts/poc.sh http://localhost:8088
docker compose down -v
| Campo | Valor |
|---|---|
| CVE | CVE-2016-15041 |
| Gravedad | Alta |
| Tipo | XSS almacenado (no autenticado) |
| Afectado | MainWP Dashboard <= 3.1.2 |
| Corregido | 3.1.3 |
El asistente de configuración rápida (Quick Setup Wizard) de MainWP Dashboard es accesible sin autenticación. Un atacante puede inyectar JavaScript a través del parámetro mwp_setup_purchase_username. La carga útil se almacena en las opciones de WordPress y se renderiza sin escapar cuando un administrador ve la página de Extensiones.
GET /wp-admin/admin-post.php?page=mainwp-setup&step=purchase_extension → obtener el nonce CSRF (no se requiere autenticación)POST de la carga útil XSS con el nonce (no se requiere autenticación)El plugin vulnerable (v3.1.2) se obtuvo de la revisión r1394563 del SVN de WordPress (14 de abril de 2016). Se aplicaron parches menores de compatibilidad con PHP 8 que no afectan a la vulnerabilidad:
__autoload() por spl_autoload_register()La vulnerabilidad XSS existe en view/view-mainwp-extensions-view.php, línea 74, donde $username se imprime sin esc_attr().