CircleCI Security
Основна інформація
CircleCI - це платформа для постійної інтеграції, де ви можете визначити шаблони, вказавши, що ви хочете, щоб він робив з якимось кодом і коли це робити. Таким чином ви можете автоматизувати тестування або розгортання безпосередньо з гілки майстра вашого репозиторію, наприклад.
Дозволи
CircleCI успадковує дозволи від github та bitbucket, пов'язані з акаунтом, який увійшов. У моїх тестах я перевірив, що доки у вас є права на запис у репозиторії на github, ви зможете керувати налаштуваннями його проекту в CircleCI (встановлювати нові ssh-ключі, отримувати ключі api проекту, створювати нові гілки з новими конфігураціями CircleCI...).
Однак вам потрібно бути адміністратором репозиторію, щоб перетворити репозиторій на проект CircleCI.
Змінні середовища та Секрети
Згідно з документацією існують різні способи завантаження значень у змінні середовища всередині робочого процесу.
Вбудовані змінні середовища
Кожен контейнер, запущений CircleCI, завжди матиме певні змінні середовища, визначені в документації як-от CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
або CIRCLE_USERNAME
.
Текст у відкритому вигляді
Ви можете вказати їх у відкритому вигляді всередині команди:
Ви можете вказати їх у звичайному тексті всередині середовища виконання:
Ви можете вказати їх у звичайному тексті всередині середовища build-job:
Ви можете вказати їх у звичайному тексті всередині середовища контейнера:
Секрети проекту
Це секрети, які будуть доступні лише для проекту (для будь-якої гілки). Ви можете побачити їх, оголошені в https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Функціонал "Імпорт змінних" дозволяє імпортувати змінні з інших проектів до цього.
Контекстні секрети
Це секрети, які є організаційними. За замовчуванням будь-який репозиторій матиме доступ до будь-якого секрету, збереженого тут:
Проте слід зауважити, що можна вибрати іншу групу (замість Усі учасники), щоб надати доступ до секретів лише певним людям. Це наразі один із найкращих способів підвищити безпеку секретів, щоб не дозволяти всім до них доступ, а лише деяким людям.
Атаки
Пошук секретів у відкритому тексті
Якщо у вас є доступ до системи контролю версій (наприклад, github), перевірте файл .circleci/config.yml
кожного репозиторію на кожній гілці і шукайте потенційні секрети у відкритому тексті, збережені там.
Перелік секретних змінних середовища та контекстів
Перевіряючи код, ви можете знайти всі назви секретів, які використовуються в кожному файлі .circleci/config.yml
. Ви також можете отримати назви контекстів з цих файлів або перевірити їх у веб-консолі: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Ексфільтрація секретів проекту
Для того, щоб ексфільтрувати ВСІ секрети проекту та контексти, вам просто потрібно мати ПРАВА ЗАПИСУ до лише 1 репозиторію в усій організації github (і ваш обліковий запис повинен мати доступ до контекстів, але за замовчуванням кожен може мати доступ до кожного контексту).
Функціонал "Імпорт змінних" дозволяє імпортувати змінні з інших проектів до цього. Тому зловмисник може імпортувати всі змінні проекту з усіх репозиторіїв і потім ексфільтрувати їх всі разом.
Усі секрети проекту завжди встановлюються в середовищі завдань, тому просто викликання середовища та затемнення його в base64 ексфільтрує секрети в журнал консолі веб-потоків:
Якщо у вас немає доступу до веб-консолі, але у вас є доступ до репозиторію і ви знаєте, що використовується CircleCI, ви можете просто створити робочий процес, який запускається кожну хвилину і який екстрагує секрети на зовнішню адресу:
Витягнення секретів контексту
Вам потрібно вказати назву контексту (це також витягне секрети проекту):
Якщо у вас немає доступу до веб-консолі, але у вас є доступ до репозиторію і ви знаєте, що використовується CircleCI, ви можете просто змінити робочий процес, який запускається кожну хвилину і який експортує секрети на зовнішню адресу:
Просто створення нового файлу .circleci/config.yml
в репозиторії недостатньо для запуску збірки в circleci. Вам потрібно увімкнути його як проект у консолі circleci.
Втеча в хмару
CircleCI дає вам можливість запускати ваші збірки на їхніх машинах або на власних. За замовчуванням їхні машини розташовані в GCP, і спочатку ви не зможете знайти нічого відповідного. Однак, якщо жертва запускає завдання на власних машинах (потенційно, в хмарному середовищі), ви можете знайти кінцеву точку метаданих хмари з цікавою інформацією на ній.
Зверніть увагу, що в попередніх прикладах все запускалося всередині контейнера Docker, але ви також можете попросити запустити віртуальну машину VM (яка може мати різні дозволи хмари):
Чи навіть контейнер Docker з доступом до віддаленої служби Docker:
Наполегливість
Можливо створити токени користувача в CircleCI для доступу до кінцевих точок API з доступом користувача.
https://app.circleci.com/settings/user/tokens
Можливо створити токени проектів для доступу до проекту з дозволами, наданими токеном.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Можливо додати SSH-ключі до проектів.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Можливо створити cron-завдання в прихованій гілці в неочікуваному проекті, який витікає всі змінні середовища контексту щодня.
Або навіть створити в гілці / змінити відоме завдання, яке буде витікати всі контексти та секрети проектів щодня.
Якщо ви власник github, ви можете дозволити неперевірені орбіти та налаштувати одну в завданні як задній прохід
Ви можете знайти вразливість внесення команд в деяке завдання та внести команди через секрет, змінюючи його значення
Last updated