GCP - Cloudfunctions Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cloud Functions hakkında daha fazla bilgi:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Bu yetkilere sahip bir saldırgan, keyfi (kötü niyetli) kodla yeni bir Cloud Function oluşturabilir ve ona bir Service Account atayabilir. Ardından, yetkileri artırmak için metadata'dan Service Account token'ını sızdırabilir. Fonksiyonu tetiklemek için bazı yetkilere ihtiyaç duyulabilir.
Bu yöntem için istismar betikleri burada ve burada bulunabilir ve önceden oluşturulmuş .zip dosyası burada bulunabilir.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Bu yetkilere sahip bir saldırgan, bir Fonksiyonun kodunu değiştirebilir ve hatta ekli olan hizmet hesabını değiştirebilir ve bunun amacı token'ı dışarı sızdırmaktır.
Cloud functions dağıtmak için, varsayılan compute service account veya imajı oluşturmak için kullanılan service account üzerinde actAs izinlerine de ihtiyacınız olacak.
Ekstra yetkiler, 1. versiyon cloudfunctions için .call
izni veya fonksiyonu tetiklemek için role/run.invoker
rolü gibi yetkilere ihtiyaç duyulabilir.
Eğer Permission 'run.services.setIamPolicy' denied on resource...
hatasını alıyorsanız, bu --allow-unauthenticated
parametresini kullandığınız ve yeterli izinlerinizin olmadığı anlamına gelir.
Bu yöntem için istismar betiği burada bulunabilir.
cloudfunctions.functions.sourceCodeSet
Bu izinle, bir dosyayı bir fonksiyon bucket'ına yüklemek için imzalı bir URL alabilirsiniz (ancak fonksiyonun kodu değişmeyecek, yine de güncellemeniz gerekecek)
Saldırganlar açısından bu iznin ne kadar faydalı olacağından emin değilim, ama bilmekte fayda var.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Önceki .update
veya .create
ayrıcalıklarından herhangi birini kendinize vererek yükseltme yapabilirsiniz.
cloudfunctions.functions.update
Sadece cloudfunctions
izinlerine sahip olmak, iam.serviceAccounts.actAs
olmadan fonksiyonu güncelleyemezsiniz, BU YÜKSELTME İÇİN GEÇERLİ DEĞİLDİR.
Bucket üzerinde okuma ve yazma erişiminiz varsa, kodda değişiklikleri izleyebilir ve bucket'ta bir güncelleme olduğunda yeni kodunuzu kendi kodunuzla güncelleyebilirsiniz; böylece Cloud Function'ın yeni versiyonu gönderilen arka kapılı kodla çalıştırılacaktır.
Saldırı hakkında daha fazla bilgi edinebilirsiniz:
GCP - Storage PrivescAncak, bunu üçüncü taraf Cloud Functions'ı önceden tehlikeye atmak için kullanamazsınız çünkü bucket'ı kendi hesabınızda oluşturup, dış projenin üzerine yazabilmesi için halka açık izinler verirseniz, aşağıdaki hatayı alırsınız:
Ancak, bu DoS saldırıları için kullanılabilir.
Bir Cloud Function oluşturulduğunda, projenin Artifact Registry'sine yeni bir docker imajı yüklenir. İmajı yeni bir imajla değiştirmeyi denedim, hatta mevcut imajı (ve cache
imajını) silmeyi denedim ama hiçbir şey değişmedi, cloud function çalışmaya devam etti. Bu nedenle, belki de bucket ile bir Yarış Koşulu saldırısını kötüye kullanmak mümkün olabilir ama sadece saklanan imajı değiştirmek Cloud Function'ı tehlikeye atmak için yeterli değildir.
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)