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

Information Disclosure: Утечка через файлы бэкапов

FileServer раздаёт .env и .bak файлы из корня проекта

easygolangPro
Задача
# Backup Files Disclosure: некорректно настроенный файловый сервер ## Сценарий Вы внешний исследователь, изучающий публичную часть интернет-магазина **SecureShop**. У приложения есть отдельный «файловый» эндпоинт — команда планировала отдавать через него статические ресурсы (картинки, CSS), но при настройке привязала корнем не директорию со статикой, а весь проект. Дополнительно при старте приложение для удобства отладки сохраняет рантайм-конфигурацию (включая секреты) в файл рядом с исходниками. По данным внутреннего аудита, эта комбинация позволяет извлечь флаг лабы прямо через HTTP без авторизации. ## Цель 1. Изучите, какой именно эндпоинт раздаёт файлы и какова граница его «корня»: можно ли через него увидеть листинг или скачать файлы за пределами `static/`. 2. Найдите конфигурационный или резервный файл, в котором приложение хранит чувствительные данные рантайма (переменные окружения, секреты, дампы БД). 3. Извлеките флаг лабы из найденного файла. ## Теория Уязвимости класса **Information Disclosure / Sensitive File Exposure** возникают, когда сервер раздаёт через HTTP файлы, которые должны были оставаться вне публичной зоны: бэкапы (`*.bak`, `*.backup`), dot-файлы (`.env`, `.git/`), сборочные артефакты (`*.swp`, `*.orig`), исходники, дампы БД. CWE-538 «Insertion of Sensitive Information into Externally-Accessible File or Directory», OWASP A05:2021 «Security Misconfiguration». В реальных инцидентах через такой класс ошибок утекают AWS-ключи из `.env`, приватные SSH-ключи, дампы пользовательских данных. **Уязвимый паттерн:** ```go // Файловый сервер с корнем "." раздаёт ВЕСЬ проект, не только static/ fs := http.FileServer(http.Dir(".")) mux.Handle("GET /files/", http.StripPrefix("/files/", fs)) ``` Стандартный `http.FileServer` рекурсивно отдаёт всё содержимое указанной директории, включая dot-файлы и поддиректории. Если корнем указан `.` (или `..`), HTTP-клиент получает доступ ко всему репозиторию приложения. Дополнительный риск — листинг директорий: при запросе пути, оканчивающегося на `/`, FileServer по умолчанию выводит список файлов, что превращает поиск чувствительных данных в простое перебирание ссылок. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Авторизация | не требуется (анонимный доступ) | | Файловый эндпоинт | `GET /files/` (с возможностью листинга и скачивания произвольных файлов) | | Цель | найти конфигурационный/резервный файл с секретами рантайма и извлечь из него флаг |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru