5.4 KiB
GCP - Cloudbuild Privesc
{{#include ../../../banners/hacktricks-training.md}}
cloudbuild
Cloud Build के बारे में अधिक जानकारी के लिए देखें:
{{#ref}} ../gcp-services/gcp-cloud-build-enum.md {{#endref}}
cloudbuild.builds.create
इस अनुमति के साथ आप एक क्लाउड बिल्ड सबमिट कर सकते हैं। cloudbuild मशीन में डिफ़ॉल्ट रूप से एक cloudbuild सेवा खाता का टोकन होगा: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com। हालाँकि, आप cloudbuild कॉन्फ़िगरेशन में परियोजना के भीतर किसी भी सेवा खाते को संकेतित कर सकते हैं।
इसलिए, आप बस मशीन को अपने सर्वर पर टोकन को एक्सफिल्ट्रेट करने के लिए कह सकते हैं या इसके अंदर एक रिवर्स शेल प्राप्त कर सकते हैं और खुद को टोकन प्राप्त कर सकते हैं (टोकन वाला फ़ाइल बदल सकता है)।
आप मूल एक्सप्लॉइट स्क्रिप्ट यहाँ GitHub पर पा सकते हैं (लेकिन जिस स्थान से यह टोकन ले रहा था वह मेरे लिए काम नहीं किया)। इसलिए, यहाँ एक स्क्रिप्ट देखें जो एक vuln वातावरण के निर्माण, शोषण और सफाई को स्वचालित करती है और क्लाउडबिल्ड मशीन के अंदर एक रिवर्स शेल प्राप्त करने के लिए एक पायथन स्क्रिप्ट और यहाँ इसे चुराने के लिए (कोड में आप अन्य सेवा खातों को निर्दिष्ट करने का तरीका पा सकते हैं)।
अधिक गहन व्याख्या के लिए, देखें https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/
cloudbuild.builds.update
संभावित रूप से इस अनुमति के साथ आप एक क्लाउड बिल्ड को अपडेट कर सकते हैं और बस सेवा खाता टोकन चुरा सकते हैं जैसे कि पिछले अनुमति के साथ किया गया था (लेकिन दुर्भाग्यवश इस लेखन के समय मैं उस API को कॉल करने का कोई तरीका नहीं ढूंढ सका)।
TODO
cloudbuild.repositories.accessReadToken
इस अनुमति के साथ उपयोगकर्ता पढ़ने के लिए एक्सेस टोकन प्राप्त कर सकता है जिसका उपयोग रिपॉजिटरी तक पहुँचने के लिए किया जाता है:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"
cloudbuild.repositories.accessReadWriteToken
इस अनुमति के साथ उपयोगकर्ता पढ़ने और लिखने की पहुँच टोकन प्राप्त कर सकता है जिसका उपयोग भंडार तक पहुँचने के लिए किया जाता है:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"
cloudbuild.connections.fetchLinkableRepositories
इस अनुमति के साथ आप उन रिपोजिटरीज़ को प्राप्त कर सकते हैं जिन तक कनेक्शन की पहुँच है:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"
{{#include ../../../banners/hacktricks-training.md}}