GCP - Cloud Build Enum
Informations de base
Google Cloud Build est une plateforme CI/CD gérée qui automatise la construction de logiciels et les processus de publication, s'intégrant aux dépôts de code source et prenant en charge une large gamme de langages de programmation. Il permet aux développeurs de construire, tester et déployer du code automatiquement tout en offrant la flexibilité de personnaliser les étapes de construction et les flux de travail.
Chaque Déclencheur Cloud Build est lié à un Dépôt Cloud ou connecté directement à un dépôt externe (Github, Bitbucket et Gitlab).
Je n'ai pas trouvé de moyen de voler le jeton Github/Bitbucket à partir d'ici ou des Dépôts Cloud car lorsque le dépôt est téléchargé, il est accédé via une URL https://source.cloud.google.com/ et Github n'est pas accessible par le client.
Événements
Le Cloud Build peut être déclenché si :
Pousser vers une branche : Spécifiez la branche
Pousser une nouvelle étiquette : Spécifiez l'étiquette
Demande de tirage : Spécifiez la branche qui reçoit la PR
Invocation manuelle
Message Pub/Sub : Spécifiez le sujet
Événement de webhook : Exposera une URL HTTPS et la demande doit être authentifiée avec un secret
Exécution
Il y a 3 options :
Un yaml/json spécifiant les commandes à exécuter. Généralement :
/cloudbuild.yaml
Seule option pouvant être spécifiée "en ligne" dans la console web et dans l'interface en ligne de commande
Option la plus courante
Pertinente pour un accès non authentifié
Un Dockerfile à construire
Un Buildpack à construire
Autorisations SA
Le Compte de service a la portée cloud-platform
, il peut donc utiliser tous les privilèges. Si aucun SA n'est spécifié (comme lors de la soumission), le SA par défaut <num-projet>@cloudbuild.gserviceaccount.com
sera utilisé.
Par défaut, aucune autorisation n'est donnée mais il est assez facile d'en donner :
Approbations
Il est possible de configurer un Cloud Build pour exiger des approbations pour les exécutions de construction (désactivé par défaut).
Approbations de PR
Lorsque le déclencheur est une PR car n'importe qui peut effectuer des PR sur des dépôts publics, il serait très dangereux de simplement autoriser l'exécution du déclencheur avec n'importe quelle PR. Par conséquent, par défaut, l'exécution ne sera automatique que pour les propriétaires et les collaborateurs, et pour exécuter le déclencheur avec les PR d'autres utilisateurs, un propriétaire ou un collaborateur doit commenter /gcbrun
.
Connexions & Dépôts
Des connexions peuvent être créées via :
GitHub : Il affichera une invite OAuth demandant des autorisations pour obtenir un jeton Github qui sera stocké dans le Gestionnaire de secrets.
GitHub Enterprise : Il demandera d'installer une GithubApp. Un jeton d'authentification de votre hôte GitHub Enterprise sera créé et stocké dans ce projet en tant que secret du Gestionnaire de secrets.
GitLab / Enterprise : Vous devez fournir le jeton d'accès API et le jeton d'accès API de lecture qui seront stockés dans le Gestionnaire de secrets.
Une fois une connexion générée, vous pouvez l'utiliser pour lier des dépôts auxquels le compte Github a accès.
Cette option est disponible via le bouton :
Notez que les dépôts connectés de cette manière ne sont disponibles que dans les Déclencheurs utilisant la 2e génération.
Connecter un Dépôt
Ce n'est pas la même chose qu'une connexion
. Cela permet différentes façons d'accéder à un dépôt Github ou Bitbucket mais ne génère pas un objet de connexion, mais génère un objet de dépôt (de 1re génération).
Cette option est disponible via le bouton :
Stockage
Parfois, Cloud Build générera un nouveau stockage pour stocker les fichiers du déclencheur. Cela se produit par exemple dans l'exemple que GCP propose avec :
Un bucket de stockage appelé security-devbox_cloudbuild est créé pour stocker un fichier .tgz
avec les fichiers à utiliser.
Obtenir un shell
Installez gcloud à l'intérieur de Cloud Build :
Énumération
Vous pourriez trouver des informations sensibles dans les configurations de construction et les journaux.
Élévation de privilèges
pageGCP - Cloudbuild PrivescAccès non authentifié
pageGCP - Cloud Build Unauthenticated EnumPost-exploitation
pageGCP - Cloud Build Post ExploitationDernière mise à jour