GCP - Cloud Build Enum
Podstawowe informacje
Google Cloud Build to zarządzana platforma CI/CD, która automatyzuje procesy budowy oprogramowania i wydawania, integrując się z repozytoriami kodu źródłowego i obsługując szeroki zakres języków programowania. Umożliwia programistom automatyczną budowę, testowanie i wdrażanie kodu, zapewniając jednocześnie elastyczność w dostosowywaniu kroków budowy i przepływów pracy.
Każdy wyzwalacz Cloud Build jest powiązany z Repozytorium Cloud lub bezpośrednio połączony z zewnętrznym repozytorium (Github, Bitbucket i Gitlab).
Nie widziałem sposobu na kradzież tokenu Github/Bitbucket stąd ani z Repozytoriów Cloud, ponieważ po pobraniu repozytorium jest ono dostępne za pośrednictwem adresu URL https://source.cloud.google.com/, a Github nie jest dostępny dla klienta.
Wydarzenia
Cloud Build może zostać wywołany, jeśli:
Wprowadzono zmiany do gałęzi: Określ gałąź
Dodano nowy znacznik: Określ znacznik
Pull request: Określ gałąź, która otrzymuje PR
Ręczne wywołanie
Wiadomość Pub/Sub: Określ temat
Zdarzenie webhook: Ujawni adres URL HTTPS, a żądanie musi być uwierzytelnione za pomocą sekretu
Wykonanie
Istnieją 3 opcje:
Plik yaml/json określający polecenia do wykonania. Zazwyczaj:
/cloudbuild.yaml
Jedna, która może być określona „w linii” w konsoli internetowej i w wierszu poleceń
Najczęstsza opcja
Istotna dla dostępu nieuwierzytelnionego
Dockerfile do budowy
Buildpack do budowy
Uprawnienia SA
Konto usługi ma zakres cloud-platform
, dzięki czemu może korzystać ze wszystkich uprawnień. Jeśli nie jest określone żadne konto usługi (jak przy przesyłaniu), zostanie użyte domyślne konto usługi <numer-projektu>@cloudbuild.gserviceaccount.com
.
Domyślnie nie są udzielane żadne uprawnienia, ale jest dość łatwo nadać je:
Zatwierdzenia
Możliwe jest skonfigurowanie Cloud Build do wymagania zatwierdzeń dla wykonania budowy (domyślnie wyłączone).
Zatwierdzenia PR
Gdy wyzwalacz to PR, ponieważ każdy może wykonać PR do publicznych repozytoriów, byłoby bardzo niebezpiecznie pozwolić na wykonanie wyzwalacza z dowolnym PR. Dlatego domyślnie wykonanie będzie automatyczne 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 dodać komentarz /gcbrun
.
Połączenia i Repozytoria
Połączenia można utworzyć za pomocą:
GitHub: Wyświetli monit OAuth proszący o uprawnienia do uzyskania tokenu Github, który zostanie przechowywany w Menedżerze Sekretów.
GitHub Enterprise: Poprosi o zainstalowanie GithubApp. Token uwierzytelniający z hosta GitHub Enterprise zostanie utworzony i przechowywany w tym projekcie jako sekret Menedżera Sekretów.
GitLab / Enterprise: Należy podać token dostępu do API i token dostępu do odczytu API, które zostaną przechowywane w Menedżerze Sekretów.
Po utworzeniu połączenia można go użyć do powiązania repozytoriów, do których konto Github ma dostęp.
Ta opcja jest dostępna za pomocą przycisku:
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
. Pozwala to 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 za pomocą przycisku:
Przechowywanie
Czasami Cloud Build wygeneruje nowe miejsce przechowywania plików dla wyzwalacza. Dzieje się to na przykład w przykładzie, który oferuje GCP z:
Uzyskaj dostęp do powłoki
Utworzono kubełek o nazwie security-devbox_cloudbuild, aby przechowywać plik .tgz
z plikami do użycia.
Zainstaluj gcloud wewnątrz Cloud Build:
Wyliczanie
Możesz znaleźć wrażliwe informacje w konfiguracjach budowy i logach.
Eskalacja uprawnień
pageGCP - Cloudbuild PrivescNieuwierzytelniony dostęp
pageGCP - Cloud Build Unauthenticated EnumPo wykorzystaniu
pageGCP - Cloud Build Post ExploitationLast updated