GCP - IAM Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

IAM

IAM hakkında daha fazla bilgi için:

GCP - IAM, Principals & Org Policies Enum

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:

gcloud iam roles update <rol name> --project <project> --add-permissions <permission>

İş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)

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

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.

gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json

gcloud auth activate-service-account --key-file=sa_cred.json

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

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.

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

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

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

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.

gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"

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 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

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:

# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com

Sonra bunu kullanarak hizmete erişebilirsiniz:

curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app

Bu tür belirteçler aracılığıyla kimlik doğrulamasını destekleyen bazı hizmetler şunlardır:

Bir hizmet hesabı adına bir OpenID belirteci oluşturma örneğini burada bulabilirsiniz.

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated