GCP - AppEngine Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
App Engine के बारे में अधिक जानकारी के लिए देखें:
appengine.applications.get
, appengine.instances.get
, appengine.instances.list
, appengine.operations.get
, appengine.operations.list
, appengine.services.get
, appengine.services.list
, appengine.versions.create
, appengine.versions.get
, appengine.versions.list
, cloudbuild.builds.get
,iam.serviceAccounts.actAs
, resourcemanager.projects.get
, storage.objects.create
, storage.objects.list
ये gcloud
cli का उपयोग करके एक ऐप को डिप्लॉय करने के लिए आवश्यक अनुमतियाँ हैं। शायद get
और list
वाली अनुमतियाँ टाल की जा सकती हैं।
आप https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine पर पायथन कोड उदाहरण पा सकते हैं।
डिफ़ॉल्ट रूप से, ऐप सेवा का नाम default
होगा, और एक ही नाम के साथ केवल 1 उदाहरण हो सकता है।
इसे बदलने और एक दूसरा ऐप बनाने के लिए, app.yaml
में, रूट कुंजी के मान को कुछ इस तरह बदलें service: my-second-app
कम से कम 10-15 मिनट दें, अगर यह काम नहीं करता है तो deploy another of times कॉल करें और कुछ मिनट प्रतीक्षा करें।
यह सेवा खाता निर्दिष्ट करना संभव है लेकिन डिफ़ॉल्ट रूप से, App Engine का डिफ़ॉल्ट SA उपयोग किया जाता है।
ऐप्लिकेशन का URL कुछ इस तरह है https://<proj-name>.oa.r.appspot.com/
या https://<service_name>-dot-<proj-name>.oa.r.appspot.com
आपके पास एक AppEngine को अपडेट करने के लिए पर्याप्त अनुमतियाँ हो सकती हैं लेकिन एक नया बनाने के लिए नहीं। इस मामले में, आप वर्तमान App Engine को अपडेट करने के लिए इस तरह कर सकते हैं:
यदि आपने पहले ही एक AppEngine को समझौता कर लिया है और आपके पास अनुमति appengine.applications.update
और actAs है सेवा खाते का उपयोग करने के लिए, तो आप AppEngine द्वारा उपयोग किए जाने वाले सेवा खाते को निम्नलिखित के साथ संशोधित कर सकते हैं:
appengine.instances.enableDebug
, appengine.instances.get
, appengine.instances.list
, appengine.operations.get
, appengine.services.get
, appengine.services.list
, appengine.versions.get
, appengine.versions.list
, compute.projects.get
इन अनुमतियों के साथ, App Engine इंस्टेंस के प्रकार flexible (मानक नहीं) में ssh के माध्यम से लॉगिन करना संभव है। कुछ list
और get
अनुमतियाँ वास्तव में आवश्यक नहीं हो सकती हैं।
appengine.applications.update
, appengine.operations.get
मुझे लगता है कि यह केवल बैकग्राउंड SA को बदलता है जिसे गूगल एप्लिकेशनों को सेटअप करने के लिए उपयोग करेगा, इसलिए मुझे नहीं लगता कि आप इसे सेवा खाते को चुराने के लिए दुरुपयोग कर सकते हैं।
appengine.versions.getFileContents
, appengine.versions.update
इन अनुमतियों का उपयोग कैसे करें या क्या ये उपयोगी हैं, इस पर निश्चित नहीं हूँ (ध्यान दें कि जब आप कोड बदलते हैं तो एक नया संस्करण बनाया जाता है, इसलिए मुझे नहीं पता कि क्या आप केवल कोड या एक का IAM भूमिका अपडेट कर सकते हैं, लेकिन मुझे लगता है कि आप ऐसा कर सकते हैं, शायद बकेट के अंदर कोड बदलकर??)।
जैसा कि उल्लेख किया गया है, appengine संस्करण बकेट के अंदर कुछ डेटा उत्पन्न करते हैं जिसका प्रारूप नाम है: staging.<project-id>.appspot.com
। ध्यान दें कि इस बकेट को पूर्व-टेकओवर करना संभव नहीं है क्योंकि GCP उपयोगकर्ताओं को appspot.com
डोमेन नाम का उपयोग करके बकेट उत्पन्न करने के लिए अधिकृत नहीं किया गया है।
हालांकि, इस बकेट पर पढ़ने और लिखने की अनुमति के साथ, यह संभव है कि AppEngine संस्करण से जुड़े SA के लिए विशेषाधिकार बढ़ाने के लिए बकेट की निगरानी की जाए और जब भी कोई परिवर्तन किया जाए, कोड को जितनी जल्दी हो सके संशोधित किया जाए। इस तरह, इस कोड से बनाए गए कंटेनर में बैकडोर कोड निष्पादित होगा।
अधिक जानकारी के लिए और एक PoC के लिए इस पृष्ठ से संबंधित जानकारी देखें:
हालांकि App Engine आर्टिफैक्ट रजिस्ट्री के अंदर डॉकर छवियाँ बनाता है। यह परीक्षण किया गया था कि भले ही आप इस सेवा के अंदर छवि को संशोधित करें और App Engine उदाहरण को हटा दें (ताकि एक नया तैनात किया जाए) कोड निष्पादित नहीं होता है। यह संभव हो सकता है कि बकेट के साथ रेस कंडीशन हमले को करने पर निष्पादित कोड को ओवरराइट करना संभव हो, लेकिन इसका परीक्षण नहीं किया गया था।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)