GCP - Storage Privesc

Support HackTricks

Storage

बुनियादी जानकारी:

GCP - Storage Enum

storage.objects.get

यह अनुमति आपको Cloud Storage के अंदर संग्रहीत फ़ाइलों को डाउनलोड करने की अनुमति देती है। यह संभावित रूप से आपको विशेषाधिकार बढ़ाने की अनुमति देगी क्योंकि कुछ अवसरों पर संवेदनशील जानकारी वहाँ संग्रहीत होती है। इसके अलावा, कुछ GCP सेवाएँ अपनी जानकारी बकेट में संग्रहीत करती हैं:

  • GCP Composer: जब आप एक Composer Environment बनाते हैं, तो सभी DAGs का कोड एक बकेट के अंदर संग्रहीत किया जाएगा। इन कार्यों में उनके कोड के अंदर दिलचस्प जानकारी हो सकती है।

  • GCR (Container Registry): कंटेनरों की छवि बकेट के अंदर संग्रहीत होती है, जिसका अर्थ है कि यदि आप बकेट पढ़ सकते हैं, तो आप छवियों को डाउनलोड कर सकेंगे और लीक और/या स्रोत कोड की खोज कर सकेंगे।

storage.objects.setIamPolicy

आपको इस अनुभाग के पिछले परिदृश्यों का दुरुपयोग करने की अनुमति देने के लिए आप अनुमति दे सकते हैं।

storage.buckets.setIamPolicy

इस अनुमति के साथ अनुमतियों को संशोधित करने के लिए एक उदाहरण के लिए इस पृष्ठ की जांच करें:

GCP - Public Buckets Privilege Escalation

storage.hmacKeys.create

Cloud Storage की "इंटरऑपरेबिलिटी" सुविधा, जो AWS S3 के साथ क्रॉस-क्लाउड इंटरैक्शन के लिए डिज़ाइन की गई है, में सेवा खातों और उपयोगकर्ताओं के लिए HMAC कुंजी का निर्माण शामिल है। एक हमलावर इसका लाभ उठाकर उच्च विशेषाधिकार वाले सेवा खाते के लिए HMAC कुंजी उत्पन्न कर सकता है, इस प्रकार Cloud Storage के भीतर विशेषाधिकार बढ़ा सकता है। जबकि उपयोगकर्ता से संबंधित HMAC कुंजी केवल वेब कंसोल के माध्यम से पुनः प्राप्त की जा सकती हैं, दोनों एक्सेस और सीक्रेट कुंजी सदा के लिए सुलभ रहती हैं, जिससे संभावित बैकअप एक्सेस स्टोरेज की अनुमति मिलती है। इसके विपरीत, सेवा खाता से जुड़े HMAC कुंजी API-सुलभ हैं, लेकिन उनकी एक्सेस और सीक्रेट कुंजी निर्माण के बाद पुनः प्राप्त नहीं की जा सकती, जिससे निरंतर एक्सेस के लिए जटिलता का एक स्तर जुड़ता है।

# 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

इस विधि के लिए एक और शोषण स्क्रिप्ट यहां मिल सकती है।

storage.objects.create, storage.objects.delete = स्टोरेज लिखने की अनुमति

एक बकेट के अंदर नया ऑब्जेक्ट बनाने के लिए आपको storage.objects.create की आवश्यकता है और, दस्तावेज़ों के अनुसार, आपको एक मौजूदा ऑब्जेक्ट को संशोधित करने के लिए storage.objects.delete की भी आवश्यकता है।

क्लाउड में लिखने के लिए बकेट का एक बहुत सामान्य शोषण तब होता है जब बकेट वेब सर्वर फ़ाइलों को सहेज रहा है, आप नया कोड स्टोर करने में सक्षम हो सकते हैं जो वेब एप्लिकेशन द्वारा उपयोग किया जाएगा।

Composer

Composer Apache Airflow है जो GCP के अंदर प्रबंधित है। इसमें कई दिलचस्प विशेषताएँ हैं:

  • यह एक GKE क्लस्टर के अंदर चलता है, इसलिए क्लस्टर द्वारा उपयोग किया जाने वाला SA कोड के अंदर पहुंच योग्य है

  • यह कोड को एक बकेट में स्टोर करता है, इसलिए, उस बकेट पर लिखने की अनुमति रखने वाला कोई भी व्यक्ति DGA कोड (कोड जो Apache Airflow निष्पादित करेगा) को बदलने/जोड़ने में सक्षम होगा फिर, यदि आपके पास कोड स्टोर करने के लिए Composer द्वारा उपयोग किए जाने वाले बकेट पर लिखने की अनुमति है, तो आप GKE क्लस्टर में चल रहे SA के लिए प्रिवेस्क कर सकते हैं

Cloud Functions

  • Cloud Functions का कोड स्टोरेज में स्टोर होता है, इसलिए इसे ओवरराइट करके, मनमाना कोड निष्पादित करना संभव है

App Engine

  • App Engine का स्रोत कोड बकेट में स्टोर होता है, कोड को ओवरराइट करके मनमाना कोड निष्पादित करना संभव हो सकता है। यह संभव नहीं है

  • ऐसा लगता है कि कंटेनर परतें बकेट में स्टोर की गई हैं, क्या उन्हें बदलना संभव है?

GCR

  • Google Container Registry बकेट के अंदर छवियों को स्टोर करता है, यदि आप उन बकेट पर लिख सकते हैं तो आप उन बकेट के चलने के स्थान पर लेटरली मूव करने में सक्षम हो सकते हैं।

  • GCR द्वारा उपयोग किया जाने वाला बकेट एक URL के समान होगा gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com (शीर्ष स्तर के उपडोमेन यहां निर्दिष्ट हैं)।

संदर्भ

HackTricks का समर्थन करें

Last updated