CircleCI Security
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
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.
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 kontrol ettim (yeni ssh anahtarları ayarlamak, proje api anahtarlarını almak, yeni CircleCI yapılandırmaları ile yeni dallar oluşturmak...).
Ancak, repo'yu CircleCI projesine dönüştürmek için bir repo yöneticisi olmanız gerekir.
belgelere göre, bir iş akışı içinde ortam değişkenlerine değer yüklemenin farklı yolları vardır.
CircleCI tarafından çalıştırılan her konteyner, her zaman belgelere tanımlanan belirli ortam değişkenlerine sahip olacaktır; örneğin CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
veya CIRCLE_USERNAME
.
Bunları bir komut içinde düz metin olarak tanımlayabilirsiniz:
Çalışma ortamı içinde açık metin olarak tanımlayabilirsiniz:
build-job ortamı içinde açık metin olarak beyan edebilirsiniz:
bir konteynerin ortamında açık metin olarak tanımlayabilirsiniz:
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.
"Değişkenleri İçe Aktar" işlevi, bu projeye diğer projelerden değişkenleri içe aktarmaya olanak tanır.
Bunlar örgüt genelinde gizli bilgilerdir. Varsayılan olarak herhangi bir repo, burada saklanan herhangi bir gizli bilgiye erişebilecektir:
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 sadece bazı kişilerin erişmesine izin vermektir.
Eğer VCS'ye (github gibi) erişiminiz varsa, her dalda her repo'nun .circleci/config.yml
dosyasını kontrol edin ve orada saklanan potansiyel açık metin gizli bilgileri için arama yapın.
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.
Tüm proje ve bağlam GİZLİ BİLGİLERİNİ dışarıya 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).
"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 repo'lardan tüm proje değişkenlerini içe aktarabilir ve ardından hepsini birlikte dışarıya aktarabilir.
Tüm proje gizli bilgileri her zaman işlerin çevresinde ayarlanır, bu nedenle sadece çevreyi çağırmak ve base64 ile obfuscate etmek, iş akışları web günlük konsolunda gizli bilgileri dışarıya aktaracaktır:
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:
bağlam adını belirtmeniz gerekir (bu aynı zamanda proje gizli bilgilerini de sızdıracaktır):
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:
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.
CircleCI, build'lerinizi kendi makinelerinde veya kendi makinelerinizde çalıştırma seçeneği sunar. Varsayılan olarak, onların makineleri GCP'de bulunmaktadır ve başlangıçta ilgili bir şey bulamayacaksınız. Ancak, bir kurban kendi makinelerinde (potansiyel olarak, bir bulut ortamında) görevleri çalıştırıyorsa, üzerinde ilginç bilgiler bulunan bir bulut meta veri 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):
Veya uzaktan bir docker hizmetine erişimi olan bir docker konteyneri:
CircleCI'de kullanıcı tokenleri oluşturmak mümkündür, böylece kullanıcı erişimi ile API uç noktalarına erişim sağlanabilir.
https://app.circleci.com/settings/user/tokens
Proje tokenleri oluşturmak mümkündür, böylece token'e verilen izinlerle projeye erişim sağlanabilir.
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.