GCP - Cloud Build Enum
Informações Básicas
O Google Cloud Build é uma plataforma CI/CD gerenciada que automatiza a construção de software e os processos de lançamento, integrando-se a repositórios de código-fonte e suportando uma ampla variedade de linguagens de programação. Ele permite que os desenvolvedores construam, testem e implantem código automaticamente enquanto oferece flexibilidade para personalizar etapas de construção e fluxos de trabalho.
Cada Desencadeador do Cloud Build está relacionado a um Repositório do Cloud ou conectado diretamente a um repositório externo (Github, Bitbucket e Gitlab).
Não consegui ver nenhuma maneira de roubar o token do Github/Bitbucket daqui ou dos Repositórios do Cloud porque quando o repositório é baixado, ele é acessado por meio de uma URL https://source.cloud.google.com/ e o Github não é acessado pelo cliente.
Eventos
O Cloud Build pode ser acionado se:
Push para um branch: Especifique o branch
Push de uma nova tag: Especifique a tag
Pull request: Especifique o branch que recebe o PR
Invocação Manual
Mensagem Pub/Sub: Especifique o tópico
Evento de Webhook: Exporá uma URL HTTPS e a solicitação deve ser autenticada com um segredo
Execução
Existem 3 opções:
Um yaml/json especificando os comandos a serem executados. Geralmente:
/cloudbuild.yaml
Apenas um que pode ser especificado "inline" no console da web e no cli
Opção mais comum
Relevante para acesso não autenticado
Um Dockerfile para construir
Um Buildpack para construir
Permissões do SA
A Conta de Serviço tem o escopo cloud-platform
, então ela pode usar todos os privilégios. Se nenhum SA for especificado (como ao fazer submit) o SA padrão <número-do-projeto>@cloudbuild.gserviceaccount.com
será usado.
Por padrão, nenhuma permissão é concedida, mas é bastante fácil conceder algumas:
Aprovações
É possível configurar um Cloud Build para exigir aprovações para execuções de construção (desativado por padrão).
Aprovações de PR
Quando o gatilho é PR porque qualquer pessoa pode fazer PRs para repositórios públicos seria muito perigoso permitir a execução do gatilho com qualquer PR. Portanto, por padrão, a execução será apenas automática para proprietários e colaboradores, e para executar o gatilho com PRs de outros usuários, um proprietário ou colaborador deve comentar /gcbrun
.
Conexões e Repositórios
Conexões podem ser criadas em:
GitHub: Mostrará um prompt de OAuth pedindo permissões para obter um token do Github que será armazenado no Secret Manager.
GitHub Enterprise: Pedirá para instalar um GithubApp. Um token de autenticação do seu host do GitHub Enterprise será criado e armazenado neste projeto como um segredo do Secret Manager.
GitLab / Enterprise: Você precisa fornecer o token de acesso à API e o token de acesso à API de Leitura que serão armazenados no Secret Manager.
Uma vez que uma conexão é gerada, você pode usá-la para vincular repositórios aos quais a conta do Github tem acesso.
Esta opção está disponível através do botão:
Observe que os repositórios conectados com este método estão disponíveis apenas em Triggers usando a 2ª geração.
Conectar um Repositório
Isso não é o mesmo que uma conexão
. Isso permite diferentes maneiras de obter acesso a um repositório do Github ou Bitbucket mas não gera um objeto de conexão, mas gera um objeto de repositório (da 1ª geração).
Esta opção está disponível através do botão:
Armazenamento
Às vezes, o Cloud Build irá gerar um novo armazenamento para armazenar os arquivos para o gatilho. Isso acontece, por exemplo, no exemplo que o GCP oferece com:
Um bucket de armazenamento chamado security-devbox_cloudbuild é criado para armazenar um arquivo .tgz
com os arquivos a serem usados.
Obter shell
Instale o gcloud dentro do Cloud Build:
Enumeração
Você pode encontrar informações sensíveis em configurações de build e logs.
Escalação de Privilégios
pageGCP - Cloudbuild PrivescAcesso não autenticado
pageGCP - Cloud Build Unauthenticated EnumPós-Exploração
pageGCP - Cloud Build Post ExploitationÚltima actualización