# GCP - lokalna eskalacija privilegija ssh preusmeravanje

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

u ovom scenariju pretpostavljamo da ste **kompromitovali nalog bez privilegija** unutar VM-a u projektu Compute Engine.

Neverovatno, GCP dozvole Compute Engine-a koje ste kompromitovali mogu vam pomoći da **escalirate privilegije lokalno unutar mašine**. Čak i ako to neće uvek biti od velike pomoći u cloud okruženju, dobro je znati da je to moguće.

## Pročitajte skripte <a href="#follow-the-scripts" id="follow-the-scripts"></a>

**Compute Instances** su verovatno tu da **izvrše neke skripte** za obavljanje radnji sa svojim servisnim nalozima.

Kako je IAM granularan, nalog može imati **read/write** privilegije nad resursom, ali **nema privilegije za listanje**.

Odličan hipotetički primer ovoga je Compute Instance koji ima dozvolu da čita/piše rezervne kopije u skladišni bucket nazvan `instance82736-long-term-xyz-archive-0332893`.

Pokretanje `gsutil ls` iz komandne linije ne vraća ništa, jer servisni nalog nema `storage.buckets.list` IAM dozvolu. Međutim, ako pokrenete `gsutil ls gs://instance82736-long-term-xyz-archive-0332893`, možete pronaći kompletnu rezervnu kopiju datotečnog sistema, dajući vam pristup podacima u čistom tekstu koji vaš lokalni Linux nalog nema.

Možda ćete moći da pronađete ovo ime bucketa unutar skripte (u bash-u, Python-u, Ruby-ju...).

## Prilagođeni metapodaci

Administratori mogu dodati [prilagođene metapodatke](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) na **instancu** i **nivo projekta**. Ovo je jednostavno način da se proslede **arbitrarni parovi ključ/vrednost u instancu**, i obično se koristi za promenljive okruženja i skripte za pokretanje/gašenje.

Štaviše, moguće je dodati **userdata**, što je skripta koja će biti **izvršena svaki put** kada se mašina pokrene ili ponovo pokrene i koja može biti **pristupna i sa krajnje tačke metapodataka.**

Za više informacija pogledajte:

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}

## **Zloupotreba IAM dozvola**

Većina sledećih predloženih dozvola je **dodeljena podrazumevanom Compute SA,** jedini problem je što **podrazumevani pristupni opseg sprečava SA da ih koristi**. Međutim, ako je **`cloud-platform`** **opseg** omogućen ili samo **`compute`** **opseg** je omogućen, moći ćete da **ih zloupotrebite**.

Proverite sledeće dozvole:

- [**compute.instances.osLogin**](gcp-compute-privesc/index.html#compute.instances.oslogin)
- [**compute.instances.osAdminLogin**](gcp-compute-privesc/index.html#compute.instances.osadminlogin)
- [**compute.projects.setCommonInstanceMetadata**](gcp-compute-privesc/index.html#compute.projects.setcommoninstancemetadata)
- [**compute.instances.setMetadata**](gcp-compute-privesc/index.html#compute.instances.setmetadata)
- [**compute.instances.setIamPolicy**](gcp-compute-privesc/index.html#compute.instances.setiampolicy)

## Pretražite ključeve u datotečnom sistemu

Proverite da li su se drugi korisnici prijavili u gcloud unutar kutije i ostavili svoje akreditive u datotečnom sistemu:
```
sudo find / -name "gcloud"
```
Ovo su najzanimljiviji fajlovi:

- `~/.config/gcloud/credentials.db`
- `~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json`
- `~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto`
- `~/.credentials.json`

### Više regexova za API ključeve
```bash
TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"
```
## Reference

- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)

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