
Laboratório baseado em Docker para reproduzir e validar CVE-2026-56011, uma vulnerabilidade XSS não autenticada no MapPress Maps for WordPress, com alvos de comparação vulnerável e corrigido.
Este repositório contém um laboratório Docker local para reproduzir e validar a CVE-2026-56011, uma vulnerabilidade de Cross-Site Scripting não autenticado que afeta o MapPress Maps for WordPress.
MapPress Maps for WordPress é um plugin do WordPress usado para renderizar mapas dentro de páginas e posts do WordPress. O comportamento vulnerável afeta o caminho de renderização de mapas iframe que é acessível através do parâmetro de requisição mappress=embed.
Este laboratório compara duas versões do MapPress:
| Serviço | Versão do MapPress | Propósito | URL |
|---|---|---|---|
| vuln | 2.97.3 | Alvo vulnerável de comparação | http://localhost:8081 |
| patched | 2.97.4 | Alvo corrigido de comparação | http://localhost:8082 |
O caminho de validação demonstrado neste laboratório local é:```text Unauthenticated browser request → GET /?mappress=embed → request supplies a crafted name value → vulnerable target renders name into an unquoted id attribute → injected onclick handler becomes a standalone HTML attribute → clicking the rendered MapPress component triggers alert(1) → patched target keeps the payload inside a quoted and escaped id attribute → clicking the rendered component does not trigger alert(1)
O alvo vulnerável utiliza este URL manual do navegador:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
Resultado vulnerável esperado:```text Click on the rendered MapPress component → alert(1) pops up
O alvo corrigido usa o mesmo payload contra o MapPress 2.97.4:```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
Resultado corrigido esperado:```text Click on the rendered MapPress component → no alert appears
Este laboratório utiliza intencionalmente apenas validação manual no navegador. Ele não inclui script de PoC, automação de navegador, roubo de credenciais, callbacks externos, malware, persistência, atividade pós-exploração ou ataques contra sistemas externos.
## Factos Verificados
| Afirmação | Evidência | Como verificar neste laboratório |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| O CVE-2026-56011 afeta o MapPress Maps para WordPress. | Avisos públicos de vulnerabilidade identificam o plugin WordPress afetado como MapPress Maps para WordPress. | Consulte a secção Referências e inspecione o plugin instalado em ambos os alvos Docker. |
| A versão vulnerável de comparação neste laboratório é MapPress 2.97.3. | O serviço `vuln` constrói o plugin utilizando `MAPPRESS_VERSION: 2.97.3`. | Inspecione `docker-compose.yml` e `vuln/Dockerfile`. |
| A versão corrigida de comparação neste laboratório é MapPress 2.97.4. | O serviço `patched` constrói o plugin utilizando `MAPPRESS_VERSION: 2.97.4`. | Inspecione `docker-compose.yml` e `patched/Dockerfile`. |
| O MapPress 2.97.4 introduziu a correção relevante de escape no iframe. | O changelog oficial do plugin para 2.97.4 diz `Added: escape in iframe`. | Consulte o changelog oficial do plugin WordPress e compare o código fonte vulnerável e corrigido. |
| O código fonte vulnerável insere o nome do mapa no `id` do componente web sem aspas. | No 2.97.3, `mappress_map.php` renderiza `<mappress-map id={$name} ...>`. | Compare o código fonte 2.97.3 com o código fonte 2.97.4. |
| O código fonte corrigido coloca o valor `id` entre aspas e aplica escape. | No 2.97.4, `mappress_map.php` renderiza `id="` com `esc_attr($name)`. | Compare o diff do patch entre 2.97.3 e 2.97.4. |
| O caminho do iframe é acessível sem autenticação. | O MapPress regista `template_redirect` quando `$_GET['mappress']` está presente. | Solicite `/?mappress=embed...` a partir de um navegador sem iniciar sessão. |
| O caminho do iframe lê os atributos do mapa a partir do pedido. | `template_redirect()` mapeia `$_GET` para argumentos do mapa e chama o renderizador do iframe. | Inspecione `mappress.php` e reproduza o URL manual. |
| O alvo vulnerável permite injeção de atributos através de `name`. | O valor do nome criado pode escapar do atributo `id` sem aspas e tornar-se `onclick=alert(1)`. | Abra o URL manual vulnerável e clique no componente MapPress renderizado. |
| O alvo corrigido bloqueia o comportamento de injeção de atributos testado. | O resultado corrigido mantém a carga útil completa dentro do atributo `id` entre aspas. | Abra o URL manual corrigido e clique no componente MapPress renderizado. |
## Suposições e Incógnitas
Este laboratório utiliza o MapPress 2.97.3 como alvo vulnerável de comparação porque avisos públicos identificam versões até e incluindo 2.97.3 como afetadas, e o diff do código fonte mostra a renderização vulnerável do atributo sem aspas nessa versão.
Este laboratório utiliza o MapPress 2.97.4 como alvo corrigido de comparação porque avisos públicos identificam 2.97.4 como a versão corrigida, e o changelog oficial afirma que o escape foi adicionado no caminho do iframe.
O comportamento vulnerável testado é o caminho de renderização do iframe não autenticado:```text
GET /?mappress=embed&name=<crafted-value>
Este laboratório foca na execução manual no navegador de um payload de alerta inofensivo:```text name=cve56011 onclick=alert(1)
O laboratório não tenta provar uma cadeia de entrega armazenada. Alguns avisos públicos classificam a vulnerabilidade como XSS armazenado. Este repositório foca no sink de renderização de iframe confirmado pela fonte e no comportamento vulnerável versus corrigido que pode ser reproduzido localmente através da rota não autenticada `mappress=embed`.
O laboratório não demonstra:
* persistência de payload armazenado,
* comprometimento de conta WordPress,
* roubo de sessão de administrador,
* roubo de nonce,
* callbacks externos,
* coleta cega de XSS,
* roubo de credenciais,
* despejo de banco de dados,
* malware,
* persistência,
* ou ataques contra sistemas não laboratoriais.
A validação manual do navegador comprova a diferença de renderização relevante para a segurança:```text
MapPress 2.97.3:
crafted name value becomes executable onclick attribute
MapPress 2.97.4:
crafted name value remains inside the quoted id attribute
A causa raiz do CVE-2026-56011 é a codificação de saída incorreta para o valor name do mapa quando o MapPress renderiza um componente web dentro do caminho de saída do mapa iframe.