GCP - IAM Privesc
IAM
IAM hakkında daha fazla bilgi için:
GCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)
iam.roles.update
(iam.roles.get
)Bahsedilen izinlere sahip bir saldırgan, size atanan bir rolü güncelleyebilir ve size diğer kaynaklara ek izinler verebilir, örneğin:
İşte burada bir zayıf ortamın oluşturulması, istismar edilmesi ve temizlenmesini otomatikleştiren bir betik bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python betiği burada bulunmaktadır. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)Bahsedilen izinlere sahip bir saldırgan, bir Hizmet Hesabına ait bir erişim belirteci isteyebilecektir, bu nedenle kendi ayrıcalıklarımızdan daha fazla ayrıcalığa sahip bir Hizmet Hesabının erişim belirtecisini istemek mümkündür.
İşte burada bir zayıf ortamın oluşturulması, istismar edilmesi ve temizlenmesini otomatikleştiren bir betik bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python betiği burada bulunmaktadır. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
iam.serviceAccountKeys.create
iam.serviceAccountKeys.create
Bahsedilen izinlere sahip bir saldırgan, bir Hizmet Hesabı için kullanıcı tarafından yönetilen bir anahtar oluşturabilecektir, bu da bize o Hizmet Hesabı olarak GCP'ye erişim sağlayacaktır.
Burada otomatikleştirmek için bir betik bulabilirsiniz. Bir zafiyetli ortam oluşturmak, sömürmek ve temizlemek için bir betik ve bu ayrıcalığı kötüye kullanmak için bir python betiği burada bulunabilir. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
iam.serviceAccountKeys.update
bir SA'nın anahtarını değiştirmek için çalışmayacaktır çünkü bunu yapmak için iam.serviceAccountKeys.create
izinlerine de ihtiyaç vardır.
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.implicitDelegation
Eğer iam.serviceAccounts.getAccessToken
izni olan bir Servis Hesabı üzerinde iam.serviceAccounts.implicitDelegation
iznine sahipseniz, o zaman implicitDelegation kullanarak o üçüncü Servis Hesabı için bir belirteç oluşturabilirsiniz. İşte bunu açıklamaya yardımcı olacak bir diyagram.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Frhinosecuritylabs.com%2Fwp-content%2Fuploads%2F2020%2F04%2Fimage2-500x493.png&width=768&dpr=4&quality=100&sign=eb0da8c5&sv=1)
Burada otomatikleştirmek için bir betik bulabilirsiniz. Bu ayrıcalığı kötüye kullanmak için bir python betiği burada bulunabilir. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
Not olarak, belgelendirmeye göre, yetkilendirme yalnızca generateAccessToken() yöntemini kullanarak bir belirteç oluşturmak için çalışır.
iam.serviceAccounts.signBlob
iam.serviceAccounts.signBlob
Bahsedilen izinlere sahip bir saldırgan, GCP'de keyfi yükleri imzalayabilecektir. Bu nedenle, hedeflediğimiz SA tarafından imzalanmış bir JWT almak için, SA'nın imzasız bir JWT'sini oluşturup bunu bir blob olarak göndermek mümkün olacaktır. Daha fazla bilgi için burayı okuyun.
Burada otomatikleştirmek için bir betik bulabilirsiniz. Bu ayrıcalığı kötüye kullanmak için bir python betiği burada ve burada bulunabilir. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
iam.serviceAccounts.signJwt
iam.serviceAccounts.signJwt
Bahsedilen izinlere sahip bir saldırgan, düzgün biçimlendirilmiş JSON web token (JWT)'leri imzalayabilecektir. Önceki yöntemle farkı, Google'ın bir JWT içeren bir blobu imzalamasını beklemek yerine, zaten bir JWT bekleyen signJWT yöntemini kullanmamızdır. Bu kullanımı daha kolay hale getirir, ancak herhangi bir bayt yerine yalnızca JWT imzalayabilirsiniz.
Burada otomatikleştirmek için bir betik bulabilirsiniz. Bu ayrıcalığı kötüye kullanmak için bir python betiği burada bulunabilir. Daha fazla bilgi için orijinal araştırmayı kontrol edin.
iam.serviceAccounts.setIamPolicy
iam.serviceAccounts.setIamPolicy
Bahsedilen izinlere sahip bir saldırgan, servis hesaplarına IAM politikaları ekleyebilecektir. Bu, servis hesabını taklit etmek için ihtiyaç duyduğunuz izinleri kendinize vermek için kullanılabilir. Aşağıdaki örnekte, ilgili SA üzerinde roles/iam.serviceAccountTokenCreator
rolünü kendimize veriyoruz.
Burada, bir zafiyet ortamının oluşturulması, sömürülmesi ve temizlenmesini otomatikleştiren bir betik bulabilirsiniz.
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs izni, AWS'deki iam:PassRole izni gibi bir izindir. Güvenli izin yönetimini sağlamak için bir Hizmet Hesabı olarak "actAs" yeteneğini vererek, bir Hesap Makinesi örneği başlatma gibi görevleri gerçekleştirmek için önemlidir. Bu olmadan, kullanıcılar haksız erişim elde edebilirler. Ayrıca, iam.serviceAccounts.actAs'ın sömürülmesi, sadece bir tane gerektiren diğer yöntemlerle karşılaştırıldığında, her biri bir dizi izin gerektiren çeşitli yöntemleri içerir.
Hizmet hesabı taklit etme
Bir hizmet hesabını taklit etmek, yeni ve daha iyi ayrıcalıklar elde etmek için çok faydalı olabilir. Başka bir hizmet hesabını taklit etmek için üç yol vardır:
RSA özel anahtarları kullanarak kimlik doğrulama (yukarıda açıklanan)
Cloud IAM politikalarını kullanarak yetkilendirme (burada açıklanan)
GCP hizmetlerinde işlerin dağıtılması (bir kullanıcı hesabının tehlikeye atılmasıyla daha ilgili)
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.getOpenIdToken
Bahsedilen izinlere sahip bir saldırgan, bir OpenID JWT'si oluşturabilir. Bunlar, kimliği doğrulamak için kullanılır ve herhangi bir kaynağa karşı herhangi bir örtük yetkilendirme taşımazlar.
Bu ilginç yazıya göre, kimlik doğrulamak için tokenı kullanmak istediğiniz hizmeti (hizmet hesabı ve JWT'nin hedef kitlesi) belirtmeniz gerekmektedir.
Erişiminiz varsa, bir OpenIDToken oluşturabilirsiniz:
Sonra bunu kullanarak hizmete erişebilirsiniz:
Bu tür belirteçler aracılığıyla kimlik doğrulamasını destekleyen bazı hizmetler şunlardır:
Google Cloud Endpoints (Google OIDC kullanılıyorsa)
Bir hizmet hesabı adına bir OpenID belirteci oluşturma örneğini burada bulabilirsiniz.
Referanslar
Last updated