GCP - Cloud Functions Enum

HackTricks को समर्थन दें

Cloud Functions

Google Cloud Functions को इस तरह से डिज़ाइन किया गया है कि वे आपके कोड को होस्ट कर सकें, जो इवेंट्स के जवाब में निष्पादित होता है, बिना होस्ट ऑपरेटिंग सिस्टम के प्रबंधन की आवश्यकता के। इसके अलावा, ये फंक्शंस पर्यावरण वेरिएबल्स के भंडारण का समर्थन करते हैं, जिनका कोड उपयोग कर सकता है।

Storage

Cloud Functions का कोड GCP Storage में संग्रहीत होता है। इसलिए, GCP में बकेट्स पर पढ़ने की पहुंच रखने वाला कोई भी व्यक्ति Cloud Functions कोड को पढ़ने में सक्षम होगा। कोड निम्नलिखित में से किसी एक बकेट में संग्रहीत होता है:

  • gcf-sources-<number>-<region>/<function-name>-<uuid>/version-<n>/function-source.zip

  • gcf-v2-sources-<number>-<region>/<function-name>function-source.zip

उदाहरण के लिए: gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/function-source.zip

बकेट पर पढ़ने की विशेषाधिकार रखने वाला कोई भी उपयोगकर्ता निष्पादित कोड को पढ़ सकता है

Artifact Registry

यदि क्लाउड फंक्शन को इस प्रकार कॉन्फ़िगर किया गया है कि निष्पादित Docker कंटेनर को प्रोजेक्ट के अंदर एक Artifact Registry repo में संग्रहीत किया गया है, तो repo पर पढ़ने की पहुंच रखने वाला कोई भी व्यक्ति इमेज को डाउनलोड कर सकता है और स्रोत कोड की जांच कर सकता है। अधिक जानकारी के लिए देखें:

GCP - Artifact Registry Enum

SA

यदि निर्दिष्ट नहीं किया गया है, तो डिफ़ॉल्ट रूप से App Engine Default Service Account के साथ Editor permissions प्रोजेक्ट पर Cloud Function से जुड़ा होगा।

Triggers, URL & Authentication

जब एक Cloud Function बनाई जाती है तो ट्रिगर निर्दिष्ट करना आवश्यक होता है। एक सामान्य ट्रिगर HTTPS है, यह एक URL बनाएगा जहां फंक्शन को वेब ब्राउज़िंग के माध्यम से ट्रिगर किया जा सकता है। अन्य ट्रिगर हैं pub/sub, Storage, Filestore...

URL प्रारूप है https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>

जब HTTPS ट्रिगर का उपयोग किया जाता है, तो यह भी निर्दिष्ट किया जाता है कि कॉलर को फंक्शन को कॉल करने के लिए IAM प्राधिकरण की आवश्यकता है या हर कोई इसे कॉल कर सकता है:

Inside the Cloud Function

कोड को फोल्डर /workspace के अंदर डाउनलोड किया जाता है उसी फाइल नामों के साथ जो फाइलें Cloud Function में होती हैं और इसे उपयोगकर्ता www-data के साथ निष्पादित किया जाता है। डिस्क रीड-ओनली के रूप में माउंट नहीं किया गया है।

Enumeration

# List functions
gcloud functions list
gcloud functions describe <func_name> # Check triggers to see how is this function invoked
gcloud functions get-iam-policy <func_name>

# Get logs of previous runs. By default, limits to 10 lines
gcloud functions logs read <func_name> --limit [NUMBER]

# Call a function
curl https://<region>-<project>.cloudfunctions.net/<func_name>
gcloud functions call <func_name> --data='{"message": "Hello World!"}'

# If you know the name of projects you could try to BF cloud functions names

# Get events that could be used to trigger a cloud function
gcloud functions event-types list

# Access function with authentication
curl -X POST https://<region>-<project>.cloudfunctions.net/<func_name> \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{}'

Privilege Escalation

निम्नलिखित पृष्ठ पर, आप देख सकते हैं कि क्लाउड फंक्शन अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं:

GCP - Cloudfunctions Privesc

Unauthenticated Access

GCP - Cloud Functions Unauthenticated Enum

Post Exploitation

GCP - Cloud Functions Post Exploitation

Persistence

GCP - Cloud Functions Persistence

References

HackTricks को समर्थन दें

Last updated