Риск: Критический 9.1 Critical CWE-538: Insertion of Sensitive Information into Externally-Accessible File

Открытая папка .git: почему это опасно и как закрыть доступ

Директория .git содержит полную историю коммитов, исходный код, ветки и конфигурационные файлы локального репозитория Git. При копировании проекта на сервер через git clone папка .git часто оказывается в публичной веб-директории.

Если веб-сервер отдает файлы из директории /.git/HEAD или /.git/config, злоумышленник с помощью общедоступных утилит (например, git-dumper) может за пару минут восстановить и скачать весь исходный код вашего проекта.

Степень критичности и чем опасна уязвимость

Утечка исходного кода обнажает внутреннюю бизнес-логику, закрытые алгоритмы и забытые в старых коммитах пароли, даже если в последней версии они были удалены из основного файла конфигурации.

Вектор атаки: Автоматизированные сканеры и поисковые ботнеты постоянно исследуют интернет по данной сигнатуре. При обнаружении уязвимости атака запускается в автоматическом режиме без участия человека.

Как наш сканер находит эту уязвимость

Site Check выполняет безопасную проверку доступности системных файлов /.git/HEAD и /.git/config. В случае обнаружения статуса 200 проверка сигнализирует о критическом риске.

В рамках сканирования конфигурационных файлов модуль Site Check отправляет легковесные изолированные HEAD- и GET-запросы с валидацией статус-кодов (404/403 vs 200). Запросы содержат стандартные маркеры безопасности и не сохраняют скачиваемые данные в постоянное хранилище, предотвращая несанкционированное распространение конфиденциальной информации.

Как устранить уязвимость (Пошаговое руководство)

Для ликвидации риска выполните следующие действия в конфигурации вашего сервера или приложения:

Защита служебной директории Git в Nginx
      # Блокировка доступа к папке .git в Nginx:
location ~ /\.git {
    deny all;
    return 404;
}
    
  • Заблокируйте директорию /.git на уровне Nginx или Apache.
  • При деплое используйте доставку артефактов без истории репозитория (например, через git archive или rsync с исключением .git).
  • Проверьте историю коммитов на наличие старых забытых паролей.

Анатомия атаки и реальные последствия для проекта

При обнаружении открытой папки /.git атакующий использует специализированный софт (например, git-dumper или GitTools). Утилита последовательно скачивает объекты из /.git/objects/ и воссоздает полное локальное дерево репозитория, включая приватные коммиты, исходный код бэкенда и когда-либо удалённые секреты.

Финансовые и юридические риски: Полная утрата коммерческой тайны и авторских прав на программный продукт. Злоумышленники получают доступ к интеллектуальной собственности, исходным кодам и внутренним алгоритмам проекта.

Влияние на соответствие стандартам: Несоответствие стандарту ISO/IEC 27001 (контроль A.8.28 — безопасность исходного кода) и требованиям безопасности разработки ГОСТ Р 56939-2016.

Матрица эшелонированной защиты (Defense-in-Depth)

Уровень защиты Техническое действие Инструмент / Механизм
Периметр веб-сервера (Nginx / Apache) Запрет отдачи каталогов /.git/* с кодом ответа 404 Nginx deny all
Пайплайн развертывания (Deployment) Использование multi-stage Docker сборок или rsync с исключением флага --exclude=".git" Docker Multi-stage / GitHub Actions
Аудит внешнего периметра Регулярная проверка доступности /.git/HEAD внешними сканерами Site Check Scanner

Верификация устранения: команды для быстрой проверки

После внесения изменений в настройки сервера или исходный код приложения проверьте отсутствие уязвимости с помощью терминальных утилит:

Терминал: Проверка эндпоинта и заголовков ответа
curl -s -o /dev/null -w "%{http_code}\n" https://ваш-домен.com/.git/HEAD
# Ожидается: 404
    

Рекомендации DevSecOps для безопасного развертывания

Никогда не деплойте проекты методом прямого клонирования git clone в корень веб-сервера. Используйте многоэтапные Docker-сборки (multi-stage builds) или отдельную директорию публикации dist/ / build/.

Контрольный чеклист инженера безопасности:
  • ✓ Добавить шаблоны .env* и .git* в корень .gitignore и глобальный gitignore
  • ✓ Внедрить автоматический pre-commit хук gitleaks в локальный пайплайн разработки
  • ✓ Настроить регулярную ротацию скомпрометированных токенов API
  • ✓ Проверить конфигурацию веб-сервера на блокировку запросов к скрытым файлам

Часто задаваемые вопросы по устранению

Как злоумышленник скачивает код, если листинг каталога отключен?
Утилиты вроде git-dumper используют детерминированную структуру Git: сначала скачивается /.git/HEAD, затем /.git/refs/heads/main, а по полученным хешам коммитов последовательно выкачиваются все объекты из /.git/objects/.
Поможет ли удаление папки .git на боевом сервере?
Да, удаление папки .git из веб-каталога на сервере полностью ликвидирует уязвимость, так как для работы продакшен-приложения история коммитов не требуется.
Экспертное резюме инженера по информационной безопасности

Утечки секретов и конфигурационных файлов представляют максимальную угрозу автоматизированного захвата инфраструктуры. Рекомендуется внедрить pre-commit хуки (GitLeaks, TruffleHog), вынести переменные окружения в защищённые хранилища секретов (HashiCorp Vault, Doppler, AWS Secrets Manager) и настроить в веб-сервере безусловный запрет отдачи скрытых файлов с точкой.

Для предотвращения вектора «Открытая папка .git: почему это опасно и как закрыть доступ» зафиксируйте проверочные правила в CI/CD пайплайне и настройте непрерывный мониторинг внешнего периметра через Site Check.