CircleCI Security
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:
Çalışma ortamı içinde açık metin olarak bildirebilirsiniz:
build-job ortamında açık metin olarak bildirebilirsiniz:
Bir konteynerin ortamında açık metin olarak bildirebilirsiniz:
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:
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:
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):
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:
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):
Ya da uzaktan erişilebilen bir docker hizmetine sahip bir docker konteyneri bile olabilir:
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.
Last updated