Перейти к содержимому
← Каталог golang Info Disclosure

Information Disclosure: Открытый debug-эндпоинт

Debug-эндпоинт раскрывает переменные окружения и список пользователей без аутентификации

easygolangPro
Задача
# Открытый Debug-эндпоинт: утечка переменных окружения и пользовательских данных ## Сценарий Вы внешний исследователь, изучающий публичную часть интернет-магазина **SecureShop**. Команда оставила в приложении служебный эндпоинт для диагностики, который при разработке выводил переменные окружения процесса и список зарегистрированных пользователей. По данным внутреннего аудита, этот эндпоинт остался зарегистрированным в production-сборке без защиты — анонимный пользователь без логина может получить доступ к рантайм-конфигурации, включая флаг лабы. ## Цель 1. Найдите служебный диагностический эндпоинт приложения и определите, какая аутентификация (если есть) к нему применяется. 2. Изучите формат и содержимое ответа: какие именно категории данных раскрываются — конфигурация, секреты, пользователи, профайлинг. 3. Извлеките флаг лабы из ответа эндпоинта и проверьте альтернативный путь — использовать утёкшие данные для входа под привилегированной учётной записью. ## Теория Уязвимости класса **Information Disclosure / Debug Endpoint Exposure** возникают, когда диагностические/служебные маршруты остаются зарегистрированными в production. Класс знаком по реальным фреймворкам: Django `DEBUG=True` показывает stack trace + locals; Spring Boot Actuator `/actuator/env` выгружает все переменные окружения; Go `net/http/pprof` регистрирует `/debug/pprof/*` через side-effect import; Express.js `NODE_ENV=development` включает подробные ошибки. CWE-215 «Insertion of Sensitive Information into Debugging Code», CWE-489 «Active Debug Code», OWASP A05:2021 «Security Misconfiguration». **Уязвимый паттерн:** ```go // Debug-эндпоинт зарегистрирован без middleware и без env-гейта mux.HandleFunc("GET /debug", func(w http.ResponseWriter, r *http.Request) { for _, e := range os.Environ() { fmt.Fprintln(w, e) // дамп всех ENV в HTTP-ответ } }) ``` Опасность не в самом факте «отладочного» вывода, а в комбинации: (1) маршрут зарегистрирован неконтролируемо во всех окружениях; (2) у него нет проверки роли/IP/токена; (3) в ответ попадают переменные процесса, в которых хранятся секреты (`LAB_FLAG`, `LAB_ADMIN_PASS`, `DATABASE_URL`, `SECRET_KEY`). Любая из трёх проблем сама по себе — снижение качества; их совмещение — дыра, через которую анонимный клиент сразу получает компрометацию. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Авторизация | не требуется (анонимный доступ) | | Диагностический эндпоинт | `GET /debug` (без middleware, без проверки IP/токена) | | Цель | извлечь флаг из ответа эндпоинта или войти под admin, используя утёкшие credentials |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru