Каталог .git у відкритому доступі
До завантаження всього вашого репозиторію — одна URL-адреса.
Що таке Каталог .git у відкритому доступі?
Розгортання, що копіює робоче дерево в кореневий каталог сайту, копіює разом із ним і .git. Цей каталог зберігає кожен коміт і кожну версію кожного файлу, а не лише те, що працює зараз. Будь-хто, хто може до нього звернутися, відновить усе дерево вихідного коду, зокрема секрети, видалені в пізніших комітах. Ви запитаєте /.git/ на робочому сайті, запустите git-dumper, щоб відновити вихідний код, і прочитаєте з нього пароль до бази даних. Потім заблокуєте шлях на вебсервері, розгорнете артефакти збірки замість репозиторію та заміните те, що витекло.
Що ви дізнаєтесь у Каталог .git у відкритому доступі
- Розпізнавайте каталог .git у відкритому доступі: розгортання, що кладе весь репозиторій у кореневий каталог сайту, перетворює публічну URL-адресу на повне розкриття вихідного коду та історії
- Простежте атаку: від списку файлів /.git/, який можна переглядати, і доступного для читання .git/config — до завантаження через git-dumper, що відновлює дерево вихідного коду, і далі до секретів, знайдених у закомічених налаштуваннях
- Розумійте, що .git містить усю історію комітів, тож облікові дані, змінені або видалені в пізніших комітах, можна відновити з репозиторію у відкритому доступі
- Застосовуйте довготривале виправлення: розгортайте артефакти збірки замість репозиторію, щоб .git ніколи не потрапляв у продакшн, і замінюйте всі облікові дані, які розкрив відкритий доступ
- Розрізняйте розкриття репозиторію через вебсервер і секрети в історії комітів репозиторію на Git-платформі та розглядайте блокування URL-адреси /.git як тимчасовий захід, а не повне виправлення
Каталог .git у відкритому доступі — Кроки навчання
-
Оцініть ціль
Сьогодні Боб націлюється на Verlune, компанію з продуктової аналітики, чия панель працює за адресою app.verlune.io. Він починає звідти, звідки почав би будь-хто, — з публічного сайту, щоб зрозуміти, що компанія випускає, перш ніж шукати лазівку. Сам застосунок мало що видає. Цікаві помилки зазвичай ховаються в шляхах, на які сайт ніколи не мав відповідати.
-
Шлях, який не мав би відповідати
Боб напряму запитує /.git/ на тому самому хості — шлях, який правильно налаштований сервер ніколи б не віддав. Замість помилки 404 сервер відповідає списком файлів каталогу, який можна переглядати. Внутрішні файли репозиторію Git — HEAD , config , objects — лежать у кореневому каталозі сайту й віддаються, як будь-яка інша сторінка.
-
Це справжній репозиторій
Боб натискає файл config у списку. Той відкривається як звичайний конфіг Git: віддалений репозиторій origin, основна гілка, налаштування користувача. Це не випадковий файл, який хтось залишив. У продакшн потрапив увесь робочий репозиторій, тож уся історія репозиторію — за одне завантаження.
-
Відновіть вихідний код
Боб не перебирає список вручну. Він наводить на каталог, доступний ззовні, інструмент для завантаження репозиторіїв: той обходить об'єкти, які віддає сервер, і відновлює робоче дерево точно таким, яким воно є в репозиторії. За кілька секунд увесь вихідний код застосунку Verlune разом з історією вже на його власному комп'ютері.
-
Облікові дані у вихідному коді
Коли вихідний код відновлено, Боб відкриває відновлений конфіг бази даних. Найцінніше у витеклому репозиторії — зазвичай не сам код, а секрети, закомічені разом із ним. Шукати довго не доводиться.
-
Пароль і ключ
Відновлений файл віддає Бобу два робочі секрети відкритим текстом: рядок підключення до продакшн-бази даних разом із паролем і API-ключ до API адміністратора. Обидва закомітили прямо у вихідний код, тому відкритий репозиторій їх і видає.
-
Підключіться з витеклими обліковими даними
Облікові дані, що витекли, залишаються теорією, доки не відкриють якийсь доступ. Відновлений конфіг дає Бобу повний рядок підключення до бази даних — хост, назву бази, користувача й пароль, — тож він відкриває SQL-клієнт і підключається просто до продакшн-бази даних Verlune. Ні експлойта, ні викраденої сесії: база даних довіряє паролю, який видав репозиторій.
-
Таблиця клієнтів у відкритому доступі
Підключено. Боб виконує очевидний запит, і таблиця customers із продакшну повертається повністю: імена, адреси електронної пошти, тарифи й платіжні дані. Він читає живі записи про клієнтів Verlune прямо з бази даних, не маючи власного облікового запису.
-
Перевірка знань
-
Сповіщення моніторингу
Ви відповідаєте за конвеєр розгортання вебзастосунку Verlune. Уночі спрацювала перевірка моніторингу, яка стежить за чутливими шляхами на продакшні: вона звернулася до .git/config на app.verlune.io і отримала відповідь 200. Служба безпеки надіслала вам результат листом.
Охоплення стандартів безпеки
CWE
- CWE-527 Exposure of Version-Control Repository to an Unauthorized Sphere
- CWE-548 Exposure of Information Through Directory Listing
MITRE ATT&CK
- T1213.003 Data from Information Repositories: Code Repositories
CIS Controls
- CIS 16 Application Software Security
- CIS 4 Secure Configuration of Enterprise Assets and Software
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security