GCP - Cloud Build Enum
Informazioni di Base
Google Cloud Build è una piattaforma CI/CD gestita che automatizza i processi di build e rilascio del software, integrandosi con repository di codice sorgente e supportando un'ampia gamma di linguaggi di programmazione. Permette agli sviluppatori di costruire, testare e distribuire codice automaticamente fornendo flessibilità per personalizzare i passaggi di build e i flussi di lavoro.
Ogni Cloud Build Trigger è relazionato a un Cloud Repository o direttamente collegato a un repository esterno (Github, Bitbucket e Gitlab).
Non ho trovato alcun modo per rubare il token Github/Bitbucket da qui o dai Cloud Repositories perché quando il repo viene scaricato è accessibile tramite un URL https://source.cloud.google.com/ e Github non è accessibile dal client.
Eventi
Il Cloud Build può essere attivato se:
Push su un branch: Specificare il branch
Push di un nuovo tag: Specificare il tag
Pull request: Specificare il branch che riceve il PR
Invocazione manuale
Messaggio Pub/Sub: Specificare l'argomento
Evento Webhook: Esporterà un URL HTTPS e la richiesta deve essere autenticata con un segreto
Esecuzione
Ci sono 3 opzioni:
Un yaml/json che specifica i comandi da eseguire. Di solito:
/cloudbuild.yaml
Solo uno che può essere specificato "inline" nella console web e nel cli
Opzione più comune
Rilevante per accesso non autenticato
Un Dockerfile da costruire
Un Buildpack da costruire
Permessi SA
Il Service Account ha l'ambito cloud-platform
, quindi può usare tutti i privilegi. Se non viene specificato alcun SA (come quando si fa submit) verrà utilizzato il SA predefinito <proj-number>@cloudbuild.gserviceaccount.com
.
Di default non vengono concessi permessi ma è abbastanza facile assegnarne alcuni:
Approvazioni
È possibile configurare un Cloud Build per richiedere approvazioni per le esecuzioni di build (disabilitato di default).
Approvazioni PR
Quando il trigger è PR, poiché chiunque può eseguire PR su repository pubblici, sarebbe molto pericoloso permettere l'esecuzione del trigger con qualsiasi PR. Pertanto, di default, l'esecuzione sarà automatica solo per proprietari e collaboratori, e per eseguire il trigger con PR di altri utenti un proprietario o collaboratore deve commentare /gcbrun
.
Connessioni & Repositories
Le connessioni possono essere create su:
GitHub: Mostrerà un prompt OAuth chiedendo permessi per ottenere un token Github che verrà memorizzato all'interno del Secret Manager.
GitHub Enterprise: Chiederà di installare un GithubApp. Verrà creato e memorizzato in questo progetto un token di autenticazione dal tuo host GitHub Enterprise come un segreto del Secret Manager.
GitLab / Enterprise: Devi fornire il token di accesso API e il token di accesso Read API che verranno memorizzati nel Secret Manager.
Una volta generata una connessione, puoi usarla per collegare repository a cui l'account Github ha accesso.
Questa opzione è disponibile tramite il pulsante:
Nota che i repository collegati con questo metodo sono disponibili solo nei Triggers di 2a generazione.
Collegare un Repository
Questo non è lo stesso di una connessione
. Questo permette diversi modi per ottenere accesso a un repository Github o Bitbucket ma non genera un oggetto connessione, bensì genera un oggetto repository (di 1a generazione).
Questa opzione è disponibile tramite il pulsante:
Storage
A volte Cloud Build genererà un nuovo storage per memorizzare i file per il trigger. Questo accade, ad esempio, nell'esempio che GCP offre con:
Un bucket di Storage chiamato security-devbox_cloudbuild è creato per memorizzare un .tgz
con i file da utilizzare.
Ottenere una shell
Installare gcloud all'interno di cloud build:
Enumerazione
Potresti trovare informazioni sensibili nelle configurazioni di build e nei log.
Privilege Escalation
GCP - Cloudbuild PrivescUnauthenticated Access
GCP - Cloud Build Unauthenticated EnumPost Exploitation
GCP - Cloud Build Post ExploitationLast updated