GCP - Compute Privesc
Compute
Per ulteriori informazioni su Compute e VPC (rete) in GCP controlla:
pageGCP - Compute Enumcompute.projects.setCommonInstanceMetadata
compute.projects.setCommonInstanceMetadata
Con tale permesso puoi modificare le informazioni del metadata di un'istanza e cambiare le chiavi autorizzate di un utente, o creare un nuovo utente con permessi sudo. Di conseguenza, 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 di default hanno uno scope molto limitato
Avrai bisogno di essere in grado di contattare il server SSH per effettuare il login
Per ulteriori informazioni su come sfruttare questo permesso controlla:
pageGCP - Add Custom SSH Metadatacompute.instances.setMetadata
compute.instances.setMetadata
Questo permesso conferisce gli stessi privilegi del permesso precedente ma su istanze specifiche invece che su un intero progetto. Si applicano gli stessi exploit e limitazioni della sezione precedente.
compute.instances.setIamPolicy
compute.instances.setIamPolicy
Questo tipo di permesso ti permetterà di concederti un ruolo con i permessi precedenti ed elevare i privilegi abusandone.
compute.instances.osLogin
compute.instances.osLogin
Se OSLogin è abilitato nell'istanza, con questo permesso puoi semplicemente eseguire gcloud compute ssh [ISTANZA]
e connetterti all'istanza. Non avrai privilegi di root all'interno dell'istanza.
compute.instances.osAdminLogin
compute.instances.osAdminLogin
Se OSLogin è abilitato nell'istanza, con questo permesso puoi semplicemente eseguire gcloud compute ssh [ISTANZA]
e connetterti all'istanza. Avrai i privilegi di root all'interno dell'istanza.
compute.instances.create
,iam.serviceAccounts.actAs, compute.disks.create
, compute.instances.create
, compute.instances.setMetadata
, compute.instances.setServiceAccount
, compute.subnetworks.use
, compute.subnetworks.useExternalIp
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 Account di Servizio assegnato e rubare il token dell'account di servizio accedendo al metadata per elevare i privilegi ad esso.
Lo script di exploit per questo metodo può essere trovato qui.
osconfig.patchDeployments.create
| osconfig.patchJobs.exec
osconfig.patchDeployments.create
| osconfig.patchJobs.exec
Se hai i permessi osconfig.patchDeployments.create
o osconfig.patchJobs.exec
puoi creare un lavoro di patch o deployment. Questo ti consentirà di muoverti lateralmente nell'ambiente e ottenere l'esecuzione del codice su tutte le istanze di calcolo all'interno di un progetto.
Se vuoi sfruttarlo manualmente dovrai creare un lavoro di patch o deployment per un lavoro di patch esegui:
gcloud compute os-config patch-jobs execute --file=patch.json
Per distribuire un deployment di patch:
gcloud compute os-config patch-deployments create my-update --file=patch.json
Esistono strumenti automatizzati come patchy per rilevare permessi laschi e muoversi lateralmente in modo automatico.
Puoi anche abusarne per la persistenza.
compute.machineImages.setIamPolicy
compute.machineImages.setIamPolicy
Concediti permessi extra per l'immagine del computer.
compute.snapshots.setIamPolicy
compute.snapshots.setIamPolicy
Concediti permessi extra per uno snapshot del disco.
compute.disks.setIamPolicy
compute.disks.setIamPolicy
Concediti permessi extra per un disco.
Bypass delle Scopi di Accesso
Seguendo questo link troverai alcune idee per cercare di aggirare gli scope di accesso.
Escalazione Locale dei Privilegi nell'istanza di Calcolo GCP
pageGCP - local privilege escalation ssh pivotingRiferimenti
Last updated