GCP - Storage Privesc
Storage
बुनियादी जानकारी:
GCP - Storage Enumstorage.objects.get
storage.objects.get
यह अनुमति आपको Cloud Storage के अंदर संग्रहीत फ़ाइलों को डाउनलोड करने की अनुमति देती है। यह संभावित रूप से आपको विशेषाधिकार बढ़ाने की अनुमति देगी क्योंकि कुछ अवसरों पर संवेदनशील जानकारी वहाँ संग्रहीत होती है। इसके अलावा, कुछ GCP सेवाएँ अपनी जानकारी बकेट में संग्रहीत करती हैं:
GCP Composer: जब आप एक Composer Environment बनाते हैं, तो सभी DAGs का कोड एक बकेट के अंदर संग्रहीत किया जाएगा। इन कार्यों में उनके कोड के अंदर दिलचस्प जानकारी हो सकती है।
GCR (Container Registry): कंटेनरों की छवि बकेट के अंदर संग्रहीत होती है, जिसका अर्थ है कि यदि आप बकेट पढ़ सकते हैं, तो आप छवियों को डाउनलोड कर सकेंगे और लीक और/या स्रोत कोड की खोज कर सकेंगे।
storage.objects.setIamPolicy
storage.objects.setIamPolicy
आपको इस अनुभाग के पिछले परिदृश्यों का दुरुपयोग करने की अनुमति देने के लिए आप अनुमति दे सकते हैं।
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
इस अनुमति के साथ अनुमतियों को संशोधित करने के लिए एक उदाहरण के लिए इस पृष्ठ की जांच करें:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Cloud Storage की "इंटरऑपरेबिलिटी" सुविधा, जो AWS S3 के साथ क्रॉस-क्लाउड इंटरैक्शन के लिए डिज़ाइन की गई है, में सेवा खातों और उपयोगकर्ताओं के लिए HMAC कुंजी का निर्माण शामिल है। एक हमलावर इसका लाभ उठाकर उच्च विशेषाधिकार वाले सेवा खाते के लिए HMAC कुंजी उत्पन्न कर सकता है, इस प्रकार Cloud Storage के भीतर विशेषाधिकार बढ़ा सकता है। जबकि उपयोगकर्ता से संबंधित HMAC कुंजी केवल वेब कंसोल के माध्यम से पुनः प्राप्त की जा सकती हैं, दोनों एक्सेस और सीक्रेट कुंजी सदा के लिए सुलभ रहती हैं, जिससे संभावित बैकअप एक्सेस स्टोरेज की अनुमति मिलती है। इसके विपरीत, सेवा खाता से जुड़े HMAC कुंजी API-सुलभ हैं, लेकिन उनकी एक्सेस और सीक्रेट कुंजी निर्माण के बाद पुनः प्राप्त नहीं की जा सकती, जिससे निरंतर एक्सेस के लिए जटिलता का एक स्तर जुड़ता है।
इस विधि के लिए एक और शोषण स्क्रिप्ट यहां मिल सकती है।
storage.objects.create
, storage.objects.delete
= स्टोरेज लिखने की अनुमति
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
(शीर्ष स्तर के उपडोमेन यहां निर्दिष्ट हैं)।
संदर्भ
Last updated