GCP - Cloud Build Enum
Información Básica
Google Cloud Build es una plataforma de CI/CD gestionada que automatiza la construcción de software y los procesos de lanzamiento, integrándose con repositorios de código fuente y admitiendo una amplia gama de lenguajes de programación. Permite a los desarrolladores construir, probar e implementar código automáticamente al mismo tiempo que ofrece flexibilidad para personalizar los pasos de construcción y flujos de trabajo.
Cada Desencadenador de Cloud Build está relacionado con un Repositorio de Cloud o conectado directamente con un repositorio externo (Github, Bitbucket y Gitlab).
No pude encontrar ninguna forma de robar el token de Github/Bitbucket desde aquí o desde Repositorios de Cloud porque cuando se descarga el repositorio se accede a través de una URL de https://source.cloud.google.com/ y Github no es accedido por el cliente.
Eventos
Cloud Build puede ser desencadenado si:
Se hace push a una rama: Especificar la rama
Se hace push a una nueva etiqueta: Especificar la etiqueta
Pull request: Especificar la rama que recibe el PR
Invocación manual
Mensaje Pub/Sub: Especificar el tema
Evento de Webhook: Expondrá una URL HTTPS y la solicitud debe ser autenticada con un secreto
Ejecución
Hay 3 opciones:
Un yaml/json especificando los comandos a ejecutar. Por lo general:
/cloudbuild.yaml
Solo uno que se puede especificar "en línea" en la consola web y en la CLI
Opción más común
Relevante para acceso no autenticado
Un Dockerfile para construir
Un Buildpack para construir
Permisos de SA
La Cuenta de Servicio tiene el alcance cloud-platform
, por lo que puede utilizar todos los privilegios. Si no se especifica una SA (como al hacer submit) se utilizará la SA predeterminada <número-proyecto>@cloudbuild.gserviceaccount.com
.
Por defecto no se otorgan permisos, pero es bastante fácil dar algunos:
Aprobaciones
Es posible configurar un Cloud Build para requerir aprobaciones para las ejecuciones de construcción (deshabilitado de forma predeterminada).
Aprobaciones de PR
Cuando el desencadenador es un PR porque cualquiera puede realizar PRs en repositorios públicos sería muy peligroso simplemente permitir la ejecución del desencadenador con cualquier PR. Por lo tanto, de forma predeterminada, la ejecución solo será automática para propietarios y colaboradores, y para ejecutar el desencadenador con PRs de otros usuarios, un propietario o colaborador debe comentar /gcbrun
.
Conexiones y Repositorios
Las conexiones se pueden crear en:
GitHub: Mostrará un aviso de OAuth pidiendo permisos para obtener un token de Github que se almacenará dentro del Gestor de Secretos.
GitHub Enterprise: Pedirá instalar una GithubApp. Se creará y almacenará un token de autenticación de su host de GitHub Enterprise en este proyecto como un secreto del Gestor de Secretos.
GitLab / Enterprise: Necesitas proporcionar el token de acceso a la API y el token de acceso de API de Lectura que se almacenarán en el Gestor de Secretos.
Una vez que se genera una conexión, puedes usarla para vincular repositorios a los que la cuenta de Github tiene acceso.
Esta opción está disponible a través del botón:
Ten en cuenta que los repositorios conectados con este método están disponibles solo en Desencadenadores que utilizan la 2ª generación.
Conectar un Repositorio
Esto no es lo mismo que una conexión
. Esto permite diferentes formas de obtener acceso a un repositorio de Github o Bitbucket pero no genera un objeto de conexión, pero sí genera un objeto de repositorio (de 1ª generación).
Esta opción está disponible a través del botón:
Almacenamiento
A veces Cloud Build generará un nuevo almacenamiento para almacenar los archivos del desencadenador. Esto sucede, por ejemplo, en el ejemplo que ofrece GCP con:
Un bucket de almacenamiento llamado security-devbox_cloudbuild se crea para almacenar un archivo .tgz
con los archivos a utilizar.
Obtener shell
Instalar gcloud dentro de Cloud Build:
Enumeración
Podrías encontrar información sensible en las configuraciones de compilación y registros.
Escalada de Privilegios
pageGCP - Cloudbuild PrivescAcceso no Autenticado
pageGCP - Cloud Build Unauthenticated EnumPost Explotación
pageGCP - Cloud Build Post ExploitationÚltima actualización