GCP <--> Workspace Pivoting

Reading time: 11 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

Kutoka GCP hadi GWS

Misingi ya Delegation ya Domain Wide

Delegation ya Domain-Wide ya Google Workspace inaruhusu kitu cha utambulisho, iwe ni programu ya nje kutoka Google Workspace Marketplace au GCP Service Account ya ndani, kupata data katika Workspace kwa niaba ya watumiaji.

note

Hii inamaanisha kwamba akaunti za huduma ndani ya miradi ya GCP ya shirika zinaweza kuwa na uwezo wa kujifanya watumiaji wa Workspace wa shirika hilo hilo (au hata kutoka shirika tofauti).

Kwa maelezo zaidi kuhusu jinsi hii inavyofanya kazi angalia:

GCP - Understanding Domain-Wide Delegation

Kuathiri delegation iliyopo

Ikiwa mshambuliaji ameathiri baadhi ya ufikiaji juu ya GCP na anajua barua pepe halali ya mtumiaji wa Workspace (kama inavyopendelewa super admin) wa kampuni, anaweza kuorodhesha miradi yote anayo ufikiaji, kuorodhesha SAs zote za miradi, kuangalia ni akaunti za huduma zipi anazo ufikiaji, na kurudia hatua hizi zote na kila SA anayeweza kujifanya.
Kwa orodha ya akaunti zote za huduma alizo na ufikiaji nazo na orodha ya barua pepe za Workspace, mshambuliaji anaweza kujaribu kujifanya mtumiaji kwa kila akaunti ya huduma.

caution

Kumbuka kwamba unapoconfigure delegation ya domain wide mtumiaji yeyote wa Workspace haitajika, hivyo jua tu mtumiaji mmoja halali inatosha na inahitajika kwa ajili ya kujifanya.
Hata hivyo, mamlaka ya mtumiaji anayejifananisha yatatumika, hivyo ikiwa ni Super Admin utaweza kufikia kila kitu. Ikiwa haina ufikiaji wowote hii itakuwa haina maana.

GCP Generate Delegation Token

Hii ni script rahisi itakay zalisha token ya OAuth kama mtumiaji aliyepewa mamlaka ambayo unaweza kutumia kufikia API nyingine za Google kwa kutumia au bila gcloud:

bash
# Impersonate indicated user
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file>

# Impersonate indicated user and add additional scopes
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file> --scopes "https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid"

DelePwn

Inategemea zana ya DeleFriend, lakini ikiwa na nyongeza kama uwezo wa kuorodhesha kikoa, diski, gmail, kalenda na kufanya operesheni nyingine.

DeleFriend

Hii ni zana inayoweza kufanya shambulio ikifuatia hatua hizi:

  1. Orodhesha Miradi ya GCP kwa kutumia Resource Manager API.
  2. Pitia kila rasilimali ya mradi, na orodhesha rasilimali za akaunti ya huduma ya GCP ambazo mtumiaji wa IAM wa awali ana ufikiaji kwa kutumia GetIAMPolicy.
  3. Pitia kila jukumu la akaunti ya huduma, na pata majukumu ya ndani, ya msingi, na ya kawaida yenye ruhusa ya serviceAccountKeys.create kwenye rasilimali ya akaunti ya huduma inayolengwa. Inapaswa kuzingatiwa kwamba jukumu la Mhariri kwa asili lina ruhusa hii.
  4. Unda funguo mpya ya KEY_ALG_RSA_2048 ya faragha kwa kila rasilimali ya akaunti ya huduma ambayo imepatikana na ruhusa inayofaa katika sera ya IAM.
  5. Pitia kila akaunti ya huduma mpya na unda JWT kitu kwa ajili yake ambacho kinajumuisha akidi za funguo za faragha za SA na eneo la OAuth. Mchakato wa kuunda kitu kipya cha JWT ut apitia mchanganyiko wote wa maeneo ya OAuth kutoka orodha ya oauth_scopes.txt, ili kupata uwezekano wote wa uwakilishi. Orodha ya oauth_scopes.txt inasasishwa na maeneo yote ya OAuth ambayo tumepata kuwa muhimu kwa kutumia vitambulisho vya Workspace.
  6. Mbinu ya _make_authorization_grant_assertion inaonyesha umuhimu wa kutangaza mtumiaji wa target workspace, anayeitwa subject, kwa ajili ya kuzalisha JWTs chini ya DWD. Ingawa hii inaweza kuonekana inahitaji mtumiaji maalum, ni muhimu kutambua kwamba DWD inaathiri kila kitambulisho ndani ya kikoa. Kwa hivyo, kuunda JWT kwa mtumiaji yeyote wa kikoa kunaathiri vitambulisho vyote katika kikoa hicho, kulingana na ukaguzi wetu wa kuorodhesha mchanganyiko. Kwa maneno rahisi, mtumiaji mmoja halali wa Workspace ni wa kutosha kuendelea.
    Mtumiaji huyu anaweza kufafanuliwa katika faili ya config.yaml ya DeleFriend. Ikiwa mtumiaji wa kikoa anay target bado hajulikani, zana inarahisisha utambuzi wa moja kwa moja wa watumiaji halali wa workspace kwa kuskan watumiaji wa kikoa wenye majukumu kwenye miradi ya GCP. Ni muhimu kutambua (tena) kwamba JWTs ni maalum kwa kikoa na hazizalishwi kwa kila mtumiaji; hivyo, mchakato wa moja kwa moja unalenga kitambulisho kimoja cha kipekee kwa kila kikoa.
  7. Orodhesha na unda tokeni mpya ya ufikiaji wa bearer kwa kila JWT na kuthibitisha tokeni hiyo dhidi ya tokeninfo API.

Gitlab's Python script

Gitlab imeunda hii Python script ambayo inaweza kufanya mambo mawili - orodhesha directory ya mtumiaji na kuunda akaunti mpya ya kiutawala huku ikionyesha json yenye akidi za SA na mtumiaji wa kuiga. Hapa kuna jinsi unavyoweza kuitumia:

bash
# Install requirements
pip install --upgrade --user oauth2client

# Validate access only
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com

# List the directory
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--list

# Create a new admin account
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--account pwned

Create a new delegation (Persistence)

Ni uwezekano wa kuangalia Mamlaka ya Kikoa Kote katika https://admin.google.com/u/1/ac/owl/domainwidedelegation.

Mshambuliaji mwenye uwezo wa kuunda akaunti za huduma katika mradi wa GCP na haki za super admin kwa GWS anaweza kuunda mamlaka mpya inayoruhusu SAs kuiga baadhi ya watumiaji wa GWS:

  1. Kuzalisha Akaunti ya Huduma Mpya na Jozi ya Funguo Inayohusiana: Kwenye GCP, rasilimali mpya za akaunti za huduma zinaweza kuzalishwa ama kwa njia ya mwingiliano kupitia console au kwa njia ya programu kwa kutumia wito wa moja kwa moja wa API na zana za CLI. Hii inahitaji jukumu iam.serviceAccountAdmin au jukumu lolote la kawaida lililo na iam.serviceAccounts.create idhini. Mara akaunti ya huduma itakapoundwa, tutaendelea kuzalisha jozi ya funguo inayohusiana (iam.serviceAccountKeys.create ruhusa).
  2. Uundaji wa mamlaka mpya: Ni muhimu kuelewa kwamba ni jukumu la Super Admin pekee linaloweza kuanzisha mamlaka ya Kikoa Kote katika Google Workspace na mamlaka ya Kikoa Kote haiwezi kuanzishwa kwa njia ya programu, Inaweza kuundwa na kurekebishwa kwa mikono kupitia console ya Google Workspace.
  • Uundaji wa sheria unaweza kupatikana chini ya ukurasa API controls → Manage Domain-Wide delegation in Google Workspace Admin console.
  1. Kuambatisha haki za OAuth scopes: Wakati wa kuunda mamlaka mpya, Google inahitaji tu vigezo 2, Kitambulisho cha Mteja, ambacho ni Kitambulisho cha OAuth cha Rasilimali ya Akaunti ya Huduma ya GCP, na OAuth scopes zinazofafanua ni wito gani wa API mamlaka inahitaji.
  • orodha kamili ya OAuth scopes inaweza kupatikana hapa, lakini hapa kuna pendekezo: https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid
  1. Kufanya kwa niaba ya kitambulisho cha lengo: Katika hatua hii, tuna kitu kilichopewa mamlaka kinachofanya kazi katika GWS. Sasa, tukitumia funguo ya faragha ya Akaunti ya Huduma ya GCP, tunaweza kufanya wito wa API (katika wigo ulioainishwa katika vigezo vya OAuth scope) ili kuhamasisha na kufanya kwa niaba ya kitambulisho chochote kilichopo katika Google Workspace. Kama tulivyojifunza, akaunti ya huduma itazalisha tokeni za ufikiaji kulingana na mahitaji yake na kulingana na ruhusa aliyonayo kwa programu za REST API.
  • Angalia sehemu ya awali kwa baadhi ya zana za kutumia mamlaka hii.

Cross-Organizational delegation

OAuth SA ID ni ya kimataifa na inaweza kutumika kwa mamlaka ya kuvuka shirika. Hakuna vizuizi vilivyowekwa kuzuia mamlaka ya kuvuka kimataifa. Kwa maneno rahisi, akaunti za huduma kutoka mashirika tofauti ya GCP zinaweza kutumika kuunda mamlaka ya kikoa kote kwenye mashirika mengine ya Workspace. Hii itasababisha kuhitaji tu ufikiaji wa Super Admin kwa Workspace, na si ufikiaji wa akaunti hiyo hiyo ya GCP, kwani mpinzani anaweza kuunda Akaunti za Huduma na funguo za faragha kwenye akaunti yake ya GCP anayoitawala binafsi.

Creating a Project to enumerate Workspace

Kwa default watumiaji wa Workspace wana ruhusa ya kuunda miradi mipya, na wakati mradi mpya unaundwa mwandishi anapata jukumu la Mmiliki juu yake.

Hivyo, mtumiaji anaweza kuunda mradi, kuwezesha APIs ili kuhesabu Workspace katika mradi wake mpya na kujaribu kuhesabu hiyo.

caution

Ili mtumiaji aweze kuhesabu Workspace inahitaji pia ruhusa za kutosha za Workspace (sio kila mtumiaji ataweza kuhesabu directory).

bash
# Create project
gcloud projects create <uniq-projec-name> --name=proj-name
# Set project
gcloud config set project <uniq-projec-name>
# Enable svcs
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Get org ID
gcloud organizations list
# Get currents email user groups (at least you can check the groups and members of the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
gcloud identity groups memberships list --group-email=g<group-email>

# FROM HERE THE USER NEEDS TO HAVE ENOUGH WORKSPACE ACCESS
gcloud beta identity groups preview --customer <org-cust-id>

Check more enumeration in:

GCP - IAM, Principals & Org Policies Enum

Abusing Gcloud credentials

You can find further information about the gcloud flow to login in:

GCP - Token Persistence

Kama ilivyoelezwa hapo, gcloud inaweza kuomba upeo https://www.googleapis.com/auth/drive ambao utamruhusu mtumiaji kufikia drive ya mtumiaji.
Kama mshambuliaji, ikiwa umepata kimwili kompyuta ya mtumiaji na mtumiaji bado ameingia na akaunti yake unaweza kuingia kwa kuzalisha token yenye ufikiaji wa drive ukitumia:

bash
gcloud auth login --enable-gdrive-access

Ikiwa mshambuliaji atachafua kompyuta ya mtumiaji anaweza pia kubadilisha faili google-cloud-sdk/lib/googlecloudsdk/core/config.py na kuongeza katika CLOUDSDK_SCOPES upeo 'https://www.googleapis.com/auth/drive':

warning

Hivyo, wakati mtumiaji atajiunga tena ataunda token yenye ufikiaji wa drive ambayo mshambuliaji anaweza kutumia vibaya ili kufikia drive. Kwa wazi, kivinjari kitaonyesha kwamba token iliyoundwa itakuwa na ufikiaji wa drive, lakini kwa kuwa mtumiaji atajitaja mwenyewe gcloud auth login, labda hatashuku chochote.

Ili kuorodhesha faili za drive: curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"

Kutoka GWS hadi GCP

Ufikiaji wa watumiaji wenye mamlaka ya GCP

Ikiwa mshambuliaji ana ufikiaji kamili juu ya GWS ataweza kufikia vikundi vyenye ufikiaji wa mamlaka juu ya GCP au hata watumiaji, hivyo kuhamia kutoka GWS hadi GCP kwa kawaida ni "rahisi" zaidi kwa sababu watumiaji katika GWS wana mamlaka makubwa juu ya GCP.

Kuinua Mamlaka ya Vikundi vya Google

Kwa kawaida watumiaji wanaweza kujiunga kwa uhuru na vikundi vya Workspace vya Shirika na vikundi hivyo vinaweza kuwa na ruhusa za GCP zilizotolewa (angalia vikundi vyako katika https://groups.google.com/).

Kwa kutumia vibaya kuinua mamlaka ya vikundi vya google unaweza kuwa na uwezo wa kuinua hadi kundi lenye aina fulani ya ufikiaji wa mamlaka kwa GCP.

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