GCP - Cloud Build Enum
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).
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 przez URL https://source.cloud.google.com/ i Github nie jest dostępny przez klienta.
Wydarzenia
Cloud Build może być wyzwalany, jeśli:
Wypchnięcie do gałęzi: Określ gałąź
Wypchnięcie 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
Są 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 przesyłaniu), to domyślne SA <proj-number>@cloudbuild.gserviceaccount.com
będzie używane.
Domyślnie nie przyznaje się żadnych uprawnień, ale dość łatwo jest je przyznać:
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 wykonywać 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
.
Połączenia i repozytoria
Połączenia można tworzyć przez:
GitHub: Pojawi się monit OAuth o pozwolenie na uzyskanie tokena Github, który będzie przechowywany 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 API odczytu, które będą przechowywane w Secret Manager.
Gdy połączenie zostanie wygenerowane, możesz go użyć do połączenia repozytoriów, do których konto Github ma dostęp.
Ta opcja jest dostępna przez przycisk:
Zauważ, że repozytoria połączone w ten sposób są dostępne tylko w wyzwalaczach używających 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:
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:
Bucket Storage o nazwie security-devbox_cloudbuild został utworzony w celu przechowywania pliku .tgz
z plikami do użycia.
Get shell
Zainstaluj gcloud wewnątrz cloud build:
Enumeration
Możesz znaleźć wrażliwe informacje w konfiguracjach budowy i logach.
Eskalacja Uprawnień
GCP - Cloudbuild PrivescDostęp bez uwierzytelnienia
GCP - Cloud Build Unauthenticated EnumPo Eksploatacji
GCP - Cloud Build Post ExploitationLast updated