GCP - AppEngine Privesc
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
App Engine
For more information about App Engine check:
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
ये वे आवश्यक permissions हैं जो gcloud cli का उपयोग करके एक App deploy करने के लिए चाहिए। हो सकता है कि get और list वाले permissions को छोड़ा जा सके।
You can find python code examples in https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
By default, the name of the App service is going to be default, and there can be only 1 instance with the same name.
To change it and create a second App, in app.yaml, change the value of the root key to something like service: my-second-app
Deploy App Engine application
```bash cd python-docs-samples/appengine/flexible/hello_world gcloud app deploy #Upload and start application inside the folder ```इसे कम से कम 10–15 मिनट दें; अगर यह काम नहीं करता है तो deploy another of times चलाएँ और कुछ मिनट प्रतीक्षा करें।
Note
यह उपयोग करने के लिए 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 को इस तरह अपडेट कर सकते हैं:
मौजूदा App Engine एप्लिकेशन अपडेट करें
```bash # Find the code of the App Engine in the buckets gsutil lsDownload code
mkdir /tmp/appengine2 cd /tmp/appengine2
In this case it was found in this custom bucket but you could also use the
buckets generated when the App Engine is created
gsutil cp gs://appengine-lab-1-gcp-labs-4t04m0i6-3a97003354979ef6/labs_appengine_1_premissions_privesc.zip . unzip labs_appengine_1_premissions_privesc.zip
Now modify the code..
If you don’t have an app.yaml, create one like:
cat >> app.yaml <<EOF runtime: python312
entrypoint: gunicorn -b :$PORT main:app
env_variables: A_VARIABLE: “value” EOF
Deploy the changes
gcloud app deploy
Update the SA if you need it (and if you have actas permissions)
gcloud app update –service-account=
</details>
यदि आपने पहले से ही एक AppEngine compromised कर लिया है और आपके पास permission **`appengine.applications.update`** है और उपयोग करने के लिए service account पर **actAs** का अधिकार है, तो आप AppEngine द्वारा उपयोग किए जा रहे service account को निम्नलिखित के साथ बदल सकते हैं:
<details>
<summary>App Engine service account अपडेट करें</summary>
```bash
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.com
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
इन permissions के साथ, यह संभव है कि आप App Engine instances के प्रकार flexible (not standard) में ssh के माध्यम से लॉगिन कर सकें। कुछ list और get permissions वास्तव में आवश्यक नहीं हो सकते।
App Engine instance में SSH करना
```bash gcloud app instances ssh --serviceappengine.applications.update, appengine.operations.get
मुझे लगता है कि यह बस उस background SA को बदलता है जिसे google applications को सेटअप करने के लिए उपयोग करेगा, इसलिए मुझे नहीं लगता कि आप इसे abuse करके service account चुरा सकते हैं।
एप्लिकेशन का service account अपडेट करें
```bash gcloud app update --service-account=appengine.versions.getFileContents, appengine.versions.update
मुझे यकीन नहीं है कि इन permissions का उपयोग कैसे करना है या ये उपयोगी हैं या नहीं (नोट: जब आप कोड बदलते हैं तो एक नया version बनता है, इसलिए मुझे नहीं पता कि क्या आप सिर्फ कोड या किसी की IAM role को अपडेट कर सकते हैं, पर मेरा अनुमान है कि संभव होना चाहिए — शायद bucket के अंदर कोड बदलकर??)।
Write Access over the buckets
जैसा कि पहले कहा गया, appengine versions इस फॉर्मैट वाले bucket के अंदर कुछ डेटा जनरेट करते हैं: staging.<project-id>.appspot.com. ध्यान दें कि इस bucket को पहले से takeover करना संभव नहीं है क्योंकि GCP users को appspot.com डोमेन नाम का उपयोग करके buckets बनाने की अनुमति नहीं है।
हालाँकि, इस bucket पर read & write access होने पर, bucket को मॉनिटर करके और जब भी कोई परिवर्तन होता है तुरंत कोड को बदलकर, AppEngine version से जुड़े SA के privileges escalate करना संभव है। इस तरह, इस कोड से बनना वाला container बैकडोर किया गया कोड execute करेगा।
For more information and a PoC check the relevant information from this page:
Write Access over the Artifact Registry
हालाँकि App Engine Artifact Registry के अंदर docker images बनाता है। परीक्षण में पाया गया कि भले ही आप इस सर्विस के अंदर image को modify करें और App Engine instance को हटाया जाए (तो एक नया deploy होता है), तब भी execute होने वाला कोड बदलता नहीं है.
यह संभव हो सकता है कि buckets के साथ की तरह एक Race Condition attack करके execute होने वाले कोड को overwrite करना संभव हो, लेकिन इसका परीक्षण नहीं किया गया।
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
HackTricks Cloud

