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/` (с возможностью листинга и скачивания произвольных файлов) |
| Цель | найти конфигурационный/резервный файл с секретами рантайма и извлечь из него флаг |