Закомічені файли з секретами

Закомічені файли з секретами

Один пропущений .gitignore — і ваш .env розлітається по всьому світу.

Що таке Закомічені файли з секретами?

Один жорстко закодований секрет — це проблема, а цілий закомічений файл із секретами — ще більша. Репозиторій без .gitignore відстежує файли .env, приватні ключі й JSON сервісного облікового запису від першого коміту, і кожен клон містить копію цієї історії. Ви склонуєте публічний репозиторій, прочитаєте закомічений .env і дістанетеся до середовища staging. Потім приберете файли з відстеження командою git rm --cached, відкличете й повторно випустите витеклий API-ключ, додасте .gitignore і закомітите конфігурацію pre-commit, що блокує назви файлів із секретами, щойно її встановить кожен розробник.

Що ви дізнаєтесь у Закомічені файли з секретами

Закомічені файли з секретами — Кроки навчання

  1. Оцініть ціль

    Сьогодні Боб націлився на Tavonn — стартап із платіжних інтеграцій, який частину свого коду випускає у відкритий доступ. Він починає з публічного репозиторію й оцінює, на чому працює компанія, перш ніж шукати спосіб проникнути всередину. Публічний репозиторій — справжній подарунок для такого, як Боб: увесь проєкт і кожен файл можна завантажити однією командою.

  2. Клонуйте репозиторій

    Боб клонує репозиторій на свій комп'ютер, щоб без поспіху й офлайн прочитати кожен відстежуваний файл. Усе, що відстежує репозиторій, потрапляє в клон. Якщо файл із секретами колись закомітили, він є в копії, яку Боб щойно завантажив.

  3. Перелічіть відстежувані файли

    Боб виводить усе, що відстежує репозиторій. Його цікавить не те, що лежить на диску: він запитує git, які файли справді перебувають під контролем версій, бо саме ці файли є в кожному клоні.

  4. Прочитайте файл із секретами

    Боб відкриває закомічений файл змінних середовища. Ось чим цей витік відрізняється від одного жорстко закодованого ключа: це не одне значення, вставлене в рядок коду, а цілий файл секретів під контролем версій. Усе, що потрібно сервісу для роботи, лежить тут у відкритому тексті.

  5. Дістаньтеся до середовища staging

    Витік ключа — лише теорія, доки ключ нічого не відкриває. Усе потрібне Бобу вже є після клонування: закомічений .env дав йому базову адресу API в PUBLIC_API_URL і чинний ключ, а маршрути в клонованому src/routes/payments.js визначають потік платежів за адресою /v1/transactions . Він складає запит і передає ключ у заголовку Authorization так, як це зробив би справжній клієнт. Секретом ніколи не були ендпоінти API: вони лежать у публічному коді. Секретом був ключ, і закомічений файл віддав його Бобу, тож у сервера немає причин відхиляти запит.

  6. Платіжні дані відкриті

    Сервер повірив ключу й відповів. Боб читає платіжні записи Tavonn із середовища staging ззовні компанії, не маючи власного облікового запису.

  7. Перевірка знань

  8. Надходить сповіщення

    Ви відповідаєте за репозиторій payments-service компанії Tavonn. Уночі сканер секретів служби безпеки виявив проблему в публічному репозиторії й надіслав вам лист. Висновок однозначний: у публічному репозиторії лежить закомічений .env із чинними ключами, а .gitignore , який не пускав би такі файли, немає.

  9. Файли відстежуються, а .gitignore немає

    Спершу ви хочете переконатися на власні очі. Ви виводите список файлів, які git відстежує в репозиторії, і ось результат: .env і ключ сервісного облікового запису перебувають під контролем версій, а .gitignore у списку немає. Файл на диску — це одне, а файл під відстеженням git уже закомічений, є в історії та в кожному клоні.

  10. Приберіть файли із секретами з відстеження

    Ви припиняєте відстеження файлів із секретами командою git rm --cached : вона прибирає їх з індексу, а на диску залишає, щоб сервіс і далі міг працювати локально. Після коміту цієї зміни файли зникають із поточного стану репозиторію. Здається, що проблему вирішено. Але це не так, і чому, покаже наступний крок.

Охоплення стандартів безпеки

CWE

  • CWE-540 Inclusion of Sensitive Information in Source Code
  • CWE-522 Insufficiently Protected Credentials

MITRE ATT&CK

  • T1552.001 Unsecured Credentials: Credentials In Files

CIS Controls

  • CIS 3 Data Protection
  • CIS 16 Application Software Security

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.DS Data Security
  • PR.PS Platform Security