
Лабораторная среда на основе Docker для проверки и эксплуатации двух неаутентифицированных уязвимостей API (CVE-2026-42221, CVE-2026-42238) в nginx-ui, со сравнением исправленной версии и учебным описанием.
Этот репозиторий предназначен для проверки двух CVE, сообщённых для nginx-ui (инструмент веб-GUI управления Nginx), в среде Docker.
Отказ от ответственности
Проверка в этом репозитории предназначена только для изолированной локальной среды, управляемой вами.
Использование аналогичных методов в отношении систем третьих лиц без разрешения является нарушением закона о запрете несанкционированного доступа.
Процесс проверки, размышления и извлечённые уроки описаны в статье на Qiita.
| CVE | Описание | Затронутые версии | Исправленная версия |
|---|
| CVE-2026-42221 | Доступ к /api/install до настройки без аутентификации. Злоумышленник может зарегистрировать учётную запись администратора первым. | v2.3.7 и ранее | v2.3.8 |
| CVE-2026-42238 | Доступ к /api/restore до настройки без аутентификации. Внедрение вредоносного app.ini позволяет выполнять произвольные команды от root. | v2.3.7 и ранее | v2.3.8 |
Обе CVE имеют одну и ту же первопричину (незащищённое API-окно до настройки), и в v2.3.8 обе были исправлены добавлением одного middleware благодаря внедрению механизма секрета установки.
.
├── nginx_lab/ # Среда проверки уязвимой версии (v2.3.7) → порт 8080
│ ├── Dockerfile # Определение образа с предварительной настройкой для избежания цикла запуска
│ ├── docker-compose.yml
│ ├── nginx.conf # Исправленная конфигурация sites-enabled / stream
│ ├── init-app.ini # Начальный шаблон app.ini
│ └── entrypoint.sh # Скрипт инициализации при запуске контейнера
├── nginx_lab_patched/ # Среда проверки исправленной версии (v2.3.8) → порт 8081
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── nginx.conf
│ ├── init-app.ini
│ └── entrypoint.sh
├── scripts/
│ ├── exploit_42221.py # Эксплойт для CVE-2026-42221
│ ├── encrypt_password.py # Утилита RSA-шифрования
│ └── test_patched.py # Скрипт для проверки применения патча на v2.3.8 (порт 8081)
├── Qiita.md # Черновик статьи для Qiita
└── 学習プラン.md
pycryptodomepip install pycryptodome
cd nginx_lab
docker compose build
docker compose up -d
Проверка запуска:
curl http://localhost:8080/api/install
# → {"lock":false,"timeout":false} が返れば OK
Проблема: Образ
uozi/nginx-ui:v2.3.7в чистом виде вызывает цикл при запуске, так как отсутствуют каталогиsites-enabledи т.д. В Dockerfile этого репозитория они предварительно подготовлены.
cd scripts
python exploit_42221.py
При успехе вы сможете войти в http://localhost:8080 с учётной записью attacker.
cd nginx_lab_patched
docker compose build
docker compose up -d
В v2.3.8 для первоначальной настройки требуется секрет установки. После запуска контейнера проверьте секрет.
docker exec nginx-ui-patched cat /etc/nginx-ui/.install_secret
На экране настройки http://localhost:8081 зарегистрируйте администратора, используя это значение.
cd scripts
python test_patched.py
Если выводится [OK] 攻撃失敗(修正済み), патч работает правильно.
# Уязвимая версия
cd nginx_lab
docker compose down -v
# Исправленная версия
cd nginx_lab_patched
docker compose down -v