Утечка Исходного Кода Через Директорию .Git
Intro
Сегодня поговорим о раскрытии исходного кода через открытую директорию .git в веб-приложениях/рабочей среде.
Хакеры могут использовать инструменты для загрузки/восстановления репозитория, чтобы получить доступ к исходному коду вашего приложения.
Почему это стоит искать
Это интересно потому что:
- Его легко обнаружить.
- Анализ исходного кода может выявить другие уязвимости, более критичные.
- Любой может использовать ваш исходный код в злонамеренных целях, нанеся вам финансовый/репутационный ущерб.
- Поиск файлов, содержащих конфиденциальную информацию, например учетные данные, токены, новые конечные точки и т. д.
Согласно исследованию Truffle Security, 4,500 сайтов из миллионного топа раскрывают исходный код.
Зачем нужен Git?
Git - это система контроля версий с открытым исходным кодом. Она широко используется разработчиками для отслеживания изменений, вносимых как в проекты с открытым исходным кодом, так и в коммерческие проекты. Разработчики могут использовать Git с основными операционными системами и средами разработки.
Что такое .git?
Папка .git содержит всю информацию, необходимую для контроля версий вашего проекта, а также все сведения о коммитах, адресе репозитория и прочем. В ней также находится лог, в котором хранится история коммитов. (Подробнее о .git)
Как найти
Если нет конкретной цели, то для поиска .git мы можем использовать Google Dorks:
|
|
|
|
Если мы уже ищем что-то целенаправленно, можем указать site:
:
|
|
|
|
Так же для этой цели мы можем использовать gobuster/dirbuster (оба инструмента есть в дистрибутивах Kali/Parrot).
Коды ошибок
- 200 Found: отлично, работаем дальше.
- 404 Not found: .git не существует на сервере или выбран неверный путь
- 403 Forbidden: .git существует, но на сервере выключен листинг.
Эксплуатация
Если на сервере включен листинг каталогов, мы можем использовать всего одну простую команду для загрузки всех файлов:
|
|
После чего можно посмотреть изменения используя git diff
.
Но листинга каталогов может и не быть, так что удобней для этого использовать инструменты:
Если каталог .git
открыт, он выглядит следующим образом:
После завершения загрузки мы можем просмотреть статус всех локальных изменений и сравнить их с данными, полученными в репозитории целевого веб-сервера.
Файлы отредактировны, имя хоста и репозитория скрыты.
Cтатус показывает только удаленные файлы, поскольку у нас есть только папка .git
, загруженная с веб-сервера. Впрочем, это не проблема. Выполнение команды git checkout -- .
или git restore .
вернёт репозиторий к последнему изменению.
Что делать дальше?
Торчащий наружу .git
это сама по себе неприятная уязвимость, но чтобы не ходить два раза, можем немного пробежаться по репозиторию.
Что можно сделать с найденным репозиторием:
- Поискать CVE и уязвимости в коммитах используя semgrep или git-vuln-finder
- Поискать секреты используя trufflehog или repo-security-scanner
- Составить поверхность атаки на приложение используя noir
- Если используются контейнеры, можно использовать trivy
Как устранить уязвимость раскрытия исходного кода .git?
Чтобы устранить эту уязвимость, либо удалите папку git с вашего веб-сервера, либо запретите доступ к папкам .git
.
Запретить доступ к папкам .git
просто:
Apache
Правим .htaccess
.
|
|
Nginx
Правим nginx.conf
.
|
|
Lighttpd
Правим lighttpd.conf
.
|
|
Outro
Как мы можем увидеть, обнаружение и устранение выглядят довольно просто. Однако проблемы, которые могут принести утекшие исходники представить довольно несложно.
- Если утёк сайт с платежами, то злоумышленники могут развернуть фишинговый ресурс;
- Утекшие секреты в коде могут обеспечить злоумыленникам доступ, в том числе и к внутренним\непубличнм сервисам;
- Утекшие секреты от API, которые в лучшем случае принесут финансовые потери.
Reference
Truffle Security Co: 4,500 of the Top 1 Million Websites Leaked Source Code, Secrets
Введение в Git - Рабочая директория
How to Block .git Directory in Apache/Nginx