GCP - AppEngine Privesc
App Engine
App Engine के बारे में अधिक जानकारी के लिए देखें:
GCP - App Engine Enumappengine.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
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 का उपयोग करके एक App को तैनात करने के लिए होती हैं। शायद get
और list
को बचाया जा सकता है।
आप python कोड उदाहरण पा सकते हैं https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
डिफ़ॉल्ट रूप से, App सेवा का नाम default
होने वाला है, और एक ही नाम के साथ केवल 1 instance हो सकता है।
इसे बदलने और दूसरा App बनाने के लिए, app.yaml
में, रूट कुंजी के मान को service: my-second-app
जैसे कुछ में बदलें।
Give it at least 10-15min, if it doesn't work call deploy another of times and wait some minutes.
यह Service Account को उपयोग करने का संकेत देने के लिए संभव है लेकिन डिफ़ॉल्ट रूप से, 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
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 instances में ssh के माध्यम से लॉगिन करना संभव है (मानक नहीं)। कुछ list
और get
अनुमतियाँ वास्तव में आवश्यक नहीं हो सकती हैं।
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
मुझे लगता है कि यह केवल बैकग्राउंड SA को बदलता है जिसे Google एप्लिकेशन सेटअप करने के लिए उपयोग करेगा, इसलिए मुझे नहीं लगता कि आप इसका दुरुपयोग करके सर्विस अकाउंट चुरा सकते हैं।
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
इन अनुमतियों का उपयोग कैसे करें या यदि वे उपयोगी हैं तो निश्चित नहीं हैं (ध्यान दें कि जब आप कोड बदलते हैं तो एक नया संस्करण बनाया जाता है इसलिए मुझे नहीं पता कि आप केवल कोड या एक का IAM भूमिका अपडेट कर सकते हैं, लेकिन मुझे लगता है कि आपको सक्षम होना चाहिए, शायद बकेट के अंदर कोड बदलना??)।
बकेट्स पर लिखने की अनुमति
जहां स्रोत कोड स्थित है उन बकेट्स पर लिखने की अनुमति के साथ भी स्रोत कोड और manifest.json
को संशोधित करके मनमाना कोड निष्पादित करना संभव नहीं था।
शायद यदि आप बकेट की निगरानी कर रहे हैं और उस क्षण का पता लगाते हैं जब एक नया संस्करण बनाया जाता है और स्रोत कोड और मैनिफेस्ट अपलोड किया जाता है, तो उन्हें बदलना संभव हो सकता है ताकि नया संस्करण बैकडोर वाले का उपयोग करे??
ऐसा भी लगता है कि कंटेनर लेयर्स बकेट में संग्रहीत हैं, शायद उन्हें बदलना??
Last updated