OpenShift - Jenkins Build Pod Override
Bu sayfanın orijinal yazarı Fares
Jenkins için Kubernetes eklentisi
Bu eklenti, bir openshift/kubernetes kümesi içinde Jenkins çekirdek işlevlerinden büyük ölçüde sorumludur. Resmi belgelendirme burada Geliştiricilere bir jenkins yapı pod'unun bazı varsayılan yapılandırmalarını geçersiz kılma yeteneği gibi birkaç işlevsellik sunar.
Çekirdek işlevsellik
Bu eklenti, kodlarını uygun ortamda derlerken geliştiricilere esneklik sağlar.
Bazı kötüye kullanımlar pod yaml geçersiz kılma kullanarak
Ancak, Kali Linux gibi erişilebilir herhangi bir görüntüyü kullanmak ve bu görüntüden önceden yüklenmiş araçları kullanarak keyfi komutlar yürütmek için kötüye kullanılabilir. Aşağıdaki örnekte, çalışan pod'un servis hesabı belirteci dışa aktarılabilir.
Farklı bir sözdizimiyle aynı amaca ulaşmak.
Örnek, pod'un namespace'ini geçersiz kılmak için:
Başka bir örnek, adına göre daha fazla izne sahip olabilecek bir serviceaccount bağlamaya çalışır (ki bu, yapınızı çalıştıran varsayılan olanından daha fazla izne sahip olabilir). Var olan serviceaccount'ları tahmin etmek veya numaralandırmak gerekebilir.
Aynı teknik bir Secret bağlamaya çalışmak için de geçerlidir. Buradaki son amaç, pod oluşturmanızı nasıl yapılandıracağınızı veya ayrıcalıklar kazanacağınızı etkili bir şekilde belirlemektir.
Daha ileri gitmek
Onunla oynamaya alıştığınızda, Jenkins ve Kubernetes/Openshift hakkındaki bilginizi kullanarak yanlış yapılandırmaları/istismarları bulun.
Kendinize şu soruları sorun:
Hangi hizmet hesabı yapı oluşturma podlarını dağıtmak için kullanılıyor?
Hangi roller ve izinlere sahip? Şu anda bulunduğum ad alanının secret'larını okuyabilir mi?
Başka yapı oluşturma podlarını daha fazla numaralandırabilir miyim?
Kompromize edilmiş bir sa'dan ana düğüm/pod üzerinde komutlar çalıştırabilir miyim?
Kümede başka bir yere geçmek için küme numaralandırmasını daha da artırabilir miyim?
Hangi SCC uygulanmıştır?
Hangi oc/kubectl komutlarını vermeniz gerektiğini buradan ve buradan öğrenebilirsiniz.
Olası ayrıcalık yükseltme/geçiş senaryoları
Değerlendirmeniz sırasında tüm jenkins yapılarının worker-ns adında bir ad alanında çalıştığını keşfettiğinizi varsayalım. Yapı podlarına bağlanmış varsayılan bir servis hesabı olan default-sa olduğunu fark ettiniz, ancak bazı kaynaklarda okuma erişimi dışında pek çok izne sahip değil, ancak master-sa adında mevcut bir servis hesabını tanımlayabildiniz. Ayrıca, çalışan yapı konteyneri içinde yüklü olan oc komutuna sahip olduğunuzu varsayalım.
Aşağıdaki yapı betiği ile master-sa servis hesabını ele geçirebilir ve daha fazla numaralandırabilirsiniz.
Bağlantı düzeyinize bağlı olarak saldırınıza ya derleme betiğinden devam etmeniz ya da çalışan kümede bu sa olarak doğrudan giriş yapmanız gerekebilir:
Eğer bu SA yeterli izne sahipse (örneğin pod/exec gibi), aynı namespace içinde çalışıyorsa ana düğüm podu içinde komutlar çalıştırarak tüm jenkins örneğini ele geçirebilirsiniz. Bu podu adı ve jenkins verilerini depolamak için kullanılan bir PVC (kalıcı hacim talebi) bağladığı gerçeğiyle kolayca tanımlayabilirsiniz.
Eğer ana düğüm podu işçilerle aynı ad alanında çalışmıyorsa, benzer saldırıları ana ad alanını hedef alarak deneyebilirsiniz. Diyelim ki adı jenkins-master. Unutmayın ki jenkins-master ad alanında serviceAccount master-sa'nın var olması gerekmektedir (worker-ns ad alanında var olmayabilir).
Last updated