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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
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.
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.
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:
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:
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:
# 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:
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:
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (ako koristite Google OIDC)
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.