GCP - Storage Privesc

Support HackTricks

Storage

Basic Information:

GCP - Storage Enum

storage.objects.get

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

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

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

storage.objects.setIamPolicy

Unaweza kujipa ruhusa ya kutumia moja 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 mbinu hii inaweza kupatikana hapa.

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

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

Kuvunja kwa kawaida kwa buckets ambapo unaweza kuandika kwenye cloud ni katika kesi ambapo bucket inahifadhi 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

  • Vipengele vyote vya mazingira ya composer (msimbo wa DAGs, plugins na data) vinahifadhiwa ndani ya bucket ya GCP. Ikiwa mshambuliaji ana ruhusa za kusoma na kuandika juu yake, anaweza kufuatilia bucket na wakati wowote DAG inaundwa au kusasishwa, kuwasilisha toleo lililo na backdoor ili mazingira ya composer yapate toleo lililo na backdoor kutoka hifadhi.

Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs

Cloud Functions

  • Msimbo wa Cloud Functions unahifadhiwa katika Hifadhi na wakati toleo jipya linaundwa msimbo unasukumwa kwenye bucket na kisha kontena jipya linajengwa kutoka kwa msimbo huu. Hivyo, kuandika upya msimbo kabla ya toleo jipya kujengwa kunawezekana kufanya kazi ya cloud ifanye msimbo usio na mipaka.

Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions

App Engine

Toleo za AppEngine zinaunda data ndani ya bucket kwa muundo wa jina: staging.<project-id>.appspot.com. Ndani ya bucket hii, inawezekana kupata folda inayoitwa ae ambayo itakuwa na folda kwa kila toleo la programu ya AppEngine na ndani ya folda hizi itawezekana kupata faili ya manifest.json. Faili hii ina json yenye faili zote ambazo zinapaswa kutumika kuunda toleo maalum. Zaidi ya hayo, inawezekana kupata majina halisi ya faili, URL zao ndani ya bucket ya GCP (faili ndani ya bucket zilibadilisha majina yao kwa hash yao ya sha1) na hash ya sha1 ya kila faili.

Kumbuka kwamba haiwezekani kuchukua kabla ya bucket hii kwa sababu watumiaji wa GCP hawana mamlaka ya kuunda buckets wakitumia jina la kikoa appspot.com.

Hata hivyo, kwa ruhusa za kusoma na kuandika juu ya bucket hii, inawezekana kupandisha mamlaka kwa SA iliyoambatanishwa na toleo la App Engine kwa kufuatilia bucket na wakati wowote mabadiliko yanapofanywa (toleo jipya), kubadilisha toleo jipya haraka iwezekanavyo. Kwa njia hii, kontena linaloundwa kutoka kwa msimbo huu litatekeleza msimbo wa backdoored.

Shambulio lililotajwa linaweza kufanywa kwa njia nyingi tofauti, zote huanza kwa kufuatilia bucket ya staging.<project-id>.appspot.com:

  • Pakia msimbo mpya kamili wa toleo la AppEngine kwenye bucket tofauti na inayopatikana na kuandaa faili ya manifest.json yenye jina jipya la bucket na hash za sha1 za hizo. Kisha, wakati toleo jipya linaundwa ndani ya bucket, unahitaji tu kubadilisha faili ya manifest.json na kupakia ile mbaya.

  • Pakia toleo lililobadilishwa la requirements.txt ambalo litatumia msimbo wa utegemezi mbaya na kusasisha faili ya manifest.json na jina jipya la faili, URL na hash yake.

  • Pakia faili iliyobadilishwa ya main.py au app.yaml ambayo itatekeleza msimbo mbaya na kusasisha faili ya manifest.json na jina jipya la faili, URL na hash yake.

Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-AppEngine

GCR

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

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

Huduma hii imeondolewa hivyo shambulio hili halifai tena. Zaidi ya hayo, Katalogi ya Vitu, huduma inayochukua nafasi hii, haihifadhi picha katika buckets.

Marejeo

Support HackTricks

Last updated