
Laboratório de vulnerabilidades: MainWP Dashboard <= 3.1.2 XSS armazenado não autenticado
Laboratório vulnerável para CVE-2016-15041: XSS armazenado sem autenticação no plugin WordPress MainWP Dashboard <= 3.1.2.
docker compose up -d --build
Aguarde ~30 segundos para a configuração automática. O laboratório exibe um banner quando estiver pronto:
docker compose logs -f wordpress
| Recurso | URL / Credenciais |
|---|
| WordPress | http://localhost:8088 |
| Login de Administrador | admin / admin123 |
| Endpoint Vulnerável | 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 |
| Severidade | Alta |
| Tipo | XSS Armazenado (Não autenticado) |
| Versão Afetada | MainWP Dashboard <= 3.1.2 |
| Versão Corrigida | 3.1.3 |
O Assistente de Configuração Rápida do MainWP Dashboard é acessível sem autenticação. Um atacante pode injetar JavaScript por meio do parâmetro mwp_setup_purchase_username. O payload é armazenado nas opções do WordPress e renderizado sem escape quando um administrador visualiza a página de Extensões.
GET /wp-admin/admin-post.php?page=mainwp-setup&step=purchase_extension → obter o nonce CSRF (sem autenticação necessária)POST com o payload de XSS e o nonce (sem autenticação necessária)O plugin vulnerável (v3.1.2) foi obtido da revisão r1394563 do SVN do WordPress (14 de abril de 2016). Foram aplicados patches menores de compatibilidade com PHP 8 que não afetam a vulnerabilidade:
__autoload() obsoleto por spl_autoload_register()A vulnerabilidade de XSS existe em view/view-mainwp-extensions-view.php, linha 74, onde $username é exibido sem esc_attr().