GCP - Cloudbuild Privesc

Wspieraj HackTricks

cloudbuild

Więcej informacji o Cloud Build znajdziesz tutaj:

GCP - Cloud Build Enum

cloudbuild.builds.create

Z tą uprawnieniem możesz przesłać cloud build. Maszyna cloudbuild będzie miała w swoim systemie plików domyślnie token konta usługi cloudbuild: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Możesz jednak wskazać dowolne konto usługi w projekcie w konfiguracji cloudbuild. Dlatego możesz po prostu sprawić, że maszyna wyeksfiltruje token na twój serwer lub uzyskać odwróconą powłokę w niej i samodzielnie zdobyć token (plik zawierający token może się zmienić).

Oryginalny skrypt exploita znajdziesz tutaj na GitHubie (ale lokalizacja, z której pobiera token, nie działała dla mnie). Dlatego sprawdź skrypt automatyzujący tworzenie, eksploatację i czyszczenie podatnego środowiska tutaj oraz skrypt w pythonie, aby uzyskać odwróconą powłokę w maszynie cloudbuild i ukraść go tutaj (w kodzie znajdziesz, jak określić inne konta usług).

Dla bardziej szczegółowego wyjaśnienia, odwiedź https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potencjalnie z tą uprawnieniem będziesz mógł zaktualizować cloud build i po prostu ukraść token konta usługi tak jak to było wykonane z poprzednią uprawnieniem (ale niestety w momencie pisania tego tekstu nie mogłem znaleźć żadnego sposobu na wywołanie tego API).

TODO

cloudbuild.repositories.accessReadToken

Z tą uprawnieniem użytkownik może uzyskać token dostępu do odczytu używany do uzyskiwania dostępu do repozytorium:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

Dzięki temu uprawnieniu użytkownik może uzyskać token dostępu do odczytu i zapisu używany do uzyskiwania dostępu do repozytorium:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

Z tym uprawnieniem możesz uzyskać repozytoria, do których połączenie ma dostęp:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"
Wspieraj HackTricks

Last updated