GCP - IAM Privesc

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

IAM

Pronađite više informacija o IAM-u u:

GCP - IAM, Principals & Org Policies Enum

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

Napadač sa pomenutim dozvolama će moći da ažurira ulogu dodeljenu vama i da vam dodeli dodatne dozvole za druge resurse kao što su:

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

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i python skriptu za zloupotrebu ovog privilegija ovde. Za više informacija proverite originalno istraživanje.

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

Napadač sa pomenutim dozvolama će moći da zatraži pristupni token koji pripada Servisnom Nalog, tako da je moguće zatražiti pristupni token Servisnog Naloga sa više privilegija nego što su naše.

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

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i Python skriptu za zloupotrebu ove privilegije ovde. Za više informacija proverite originalno istraživanje.

iam.serviceAccountKeys.create

Napadač sa pomenutim dozvolama će moći da kreira ključ koji upravlja korisnikom za Service Account, što će nam omogućiti pristup GCP-u kao taj Service Account.

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

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

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i Python skriptu za zloupotrebu ove privilegije ovde. Za više informacija pogledajte originalno istraživanje.

Napomena: iam.serviceAccountKeys.update neće raditi za modifikaciju ključa SA jer su za to potrebne i dozvole iam.serviceAccountKeys.create.

iam.serviceAccounts.implicitDelegation

Ako imate iam.serviceAccounts.implicitDelegation dozvolu na Servisnom Računu koji ima iam.serviceAccounts.getAccessToken dozvolu na trećem Servisnom Računu, tada možete koristiti implicitDelegation da kreirate token za taj treći Servisni Račun. Evo dijagrama koji pomaže u objašnjenju.

Napomena: prema dokumentaciji, delegacija gcloud funkcioniše samo za generisanje tokena koristeći generateAccessToken() metodu. Tako da ovde imate kako da dobijete token koristeći API direktno:

bash
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"]
}'

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i python skriptu za zloupotrebu ove privilegije ovde. Za više informacija pogledajte originalno istraživanje.

iam.serviceAccounts.signBlob

Napadač sa pomenutim dozvolama će moći da potpiše proizvoljne payload-ove u GCP. Tako će biti moguće napraviti nepodpisani JWT SA i zatim ga poslati kao blob da bi dobili JWT potpisan od SA koji cilјamo. Za više informacija pročitajte ovo.

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i python skriptu za zloupotrebu ove privilegije ovde i ovde. Za više informacija pogledajte originalno istraživanje.

iam.serviceAccounts.signJwt

Napadač sa pomenutim dozvolama će moći da potpiše dobro oblikovane JSON web tokene (JWT-ove). Razlika u odnosu na prethodnu metodu je u tome što umesto da nateramo Google da potpiše blob koji sadrži JWT, koristimo metodu signJWT koja već očekuje JWT. Ovo olakšava korišćenje, ali možete potpisivati samo JWT umesto bilo kojih bajtova.

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i python skriptu za zloupotrebu ove privilegije ovde. Za više informacija pogledajte originalno istraživanje.

iam.serviceAccounts.setIamPolicy

Napadač sa pomenutim dozvolama će moći da doda IAM politike servisnim nalozima. Možete to zloupotrebiti da dodelite sebi dozvole koje su vam potrebne da biste se pretvarali da ste servisni nalog. U sledećem primeru dodeljujemo sebi ulogu roles/iam.serviceAccountTokenCreator nad interesantnim SA:

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

Možete pronaći skriptu za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde.

iam.serviceAccounts.actAs

iam.serviceAccounts.actAs dozvola je poput iam:PassRole dozvole iz AWS-a. Ključna je za izvršavanje zadataka, kao što je pokretanje Compute Engine instance, jer omogućava "delovanje kao" servisni nalog, osiguravajući bezbedno upravljanje dozvolama. Bez ovoga, korisnici bi mogli dobiti neprimeren pristup. Pored toga, eksploatacija iam.serviceAccounts.actAs uključuje različite metode, od kojih svaka zahteva skup dozvola, za razliku od drugih metoda koje trebaju samo jednu.

Impersonacija servisnog naloga

Impersonacija servisnog naloga može biti veoma korisna za dobijanje novih i boljih privilegija. Postoje tri načina na koja možete impersonirati drugi servisni nalog:

  • Autentifikacija koristeći RSA privatne ključeve (pokazano iznad)
  • Autorizacija koristeći Cloud IAM politike (pokazano ovde)
  • Implementacija poslova na GCP uslugama (više primenljivo na kompromitaciju korisničkog naloga)

iam.serviceAccounts.getOpenIdToken

Napadač sa pomenutim dozvolama će moći da generiše OpenID JWT. Ovi se koriste za potvrdu identiteta i ne nose nužno nikakvu implicitnu autorizaciju prema resursu.

Prema ovom zanimljivom postu, potrebno je naznačiti publiku (uslugu za koju želite da koristite token za autentifikaciju) i dobićete JWT potpisan od strane google-a koji ukazuje na servisni nalog i publiku JWT-a.

Možete generisati OpenIDToken (ako imate pristup) sa:

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

Zatim to možete jednostavno koristiti za pristup usluzi sa:

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

Neke usluge koje podržavaju autentifikaciju putem ovakvih tokena su:

Možete pronaći primer kako da kreirate OpenID token u ime servisnog naloga ovde.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks