
Лаборатория на базе Docker, демонстрирующая CVE-2019-15107 — неаутентифицированное RCE в Webmin, охватывающая развёртывание, эксплуатацию, обнаружение и устранение.
Этот проект демонстрирует CVE-2019-15107 — критическую уязвимость удалённого выполнения кода (RCE) в Webmin — в контролируемой и изолированной среде Docker. Лаборатория охватывает полный жизненный цикл уязвимости: от развёртывания и эксплуатации до обнаружения и устранения.
ОС (локальная хостовая среда): Windows / Linux / macOS
Доступность порта: порт 10000 должен быть свободен на хост-машине.
Клонируйте или скачайте репозиторий этого проекта на локальную машину.
Откройте терминал и перейдите в каталог проекта, содержащий docker-compose.yml.
Убедитесь, что Docker Desktop активен в вашей системе.
Выполните следующую команду из корневого каталога проекта, чтобы загрузить и запустить уязвимый контейнер в фоновом режиме: docker-compose up -d
Проверить статус контейнера можно командой: docker compose ps
Откройте интерфейс приложения в веб-браузере по адресу: https://localhost:10000 (примите предупреждение о локальном SSL-сертификате).
Чтобы остановить и удалить запущенную среду контейнера, выполните: docker-compose down
Уязвимость существует в неаутентифицированной конечной точке смены пароля (/password_change.cgi), где входные параметры передаются напрямую в системную оболочку без должной санитизации.
Выполните следующую команду в терминале (PowerShell/Bash), чтобы запустить диагностическую команду (id) в качестве proof-of-concept:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
Успешная эксплуатация: сервер обрабатывает внедрённый символ вертикальной черты (|), что приводит к неаутентифицированному выполнению команд с привилегиями root. Терминал выведет HTML-ответ вместе с обратной связью от оболочки контейнера (uid=0(root)), подтверждая успешное удалённое выполнение кода.
Обнаружение этой уязвимости можно выполнить с помощью:
Идентификации версии: проверка версии запущенного экземпляра Webmin на предмет попадания в уязвимый диапазон (1.880–1.920).
Мониторинга сети / журналов: анализ журналов доступа веб-сервера или WAF на предмет входящих HTTP POST-запросов к /password_change.cgi, содержащих подозрительные управляющие символы оболочки (такие как | или ;) внутри значений параметров.
Обновление: обновите Webmin до версии 1.930 или выше, которая должным образом санитизирует входные данные, передаваемые в нижележащие модули.
Контроль доступа: ограничьте сетевой доступ к порту 10000 с помощью межсетевых экранов или VPN-туннелей, чтобы предотвратить прямое воздействие из недоверенных сетей.
Демон Docker не запущен: если возникают ошибки подключения, убедитесь, что Docker Desktop полностью запущен, и проверьте с помощью docker version.
Конфликт портов (10000 уже используется): убедитесь, что никакое другое локальное приложение или служба не занимает порт 10000.
Ошибка синтаксиса curl в PowerShell: используйте curl.exe вместо стандартного curl в Windows PowerShell, чтобы избежать проблем с сопоставлением параметров из-за встроенного псевдонима Invoke-WebRequest в PowerShell.