# GCP - local privilege escalation ssh pivoting

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

in this scenario we are going to suppose that you **have compromised a non privilege account** inside a VM in a Compute Engine project.

Verbluffend genoeg kan die GPC-permissies van die Compute Engine wat jy gekompromitteer het jou help om **escalate privileges locally inside a machine**. Selfs al sal dit nie altyd baie nuttig wees in 'n cloud-omgewing nie, is dit goed om te weet dit is moontlik.

## Read the scripts <a href="#follow-the-scripts" id="follow-the-scripts"></a>

**Compute Instances** is waarskynlik daar om **sommige skripte uit te voer** wat aksies uitvoer met hul service accounts.

Aangesien IAM baie fynkorrelig is, kan 'n rekening **read/write** bevoegdhede oor 'n hulpbron hê maar **geen list bevoegdhede** hê nie.

'n Goeie hipotetiese voorbeeld hiervan is 'n Compute Instance wat toestemming het om backups te lees/skryf na 'n storage bucket genaamd `instance82736-long-term-xyz-archive-0332893`.

Die uitvoering van `gsutil ls` vanaf die opdraglyn lewer niks op nie, omdat die service account nie die `storage.buckets.list` IAM-permissie het nie. As jy egter `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` uitgevoer het, kan jy 'n volledige filesystem backup kry, wat jou clear-text toegang gee tot data wat jou plaaslike Linux-rekening nie het nie.

Jy mag hierdie bucket-naam binne 'n skrip (in bash, Python, Ruby...) kan vind.

## Custom Metadata

Administrateurs kan [custom metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) by die **instance** en **project level** voeg. Dit is bloot 'n manier om **arbitrêre sleutel/waarde pare in 'n instance in te gee**, en dit word algemeen gebruik vir omgewingsveranderlikes en startup/shutdown skripte.

Daarbenewens is dit moontlik om **userdata** by te voeg, wat 'n skrip is wat **elke keer uitgevoer sal word** wanneer die masjien begin of herbegin, en wat ook vanaf die metadata endpoint **toeganklik** is.

For more info check:

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

## **Abusing IAM permissions**

Die meeste van die volgende voorgestelde permissies word **aan die default Compute SA gegee**, die enigste probleem is dat die **default access scope die SA verhinder om dit te gebruik**. As die **`cloud-platform`** **scope** egter aangeskakel is of net die **`compute`** **scope** aangeskakel is, sal jy dit **kan misbruik**.

Check the following permissions:

- [**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)

## Search for Keys in the filesystem

Kyk of ander gebruikers by die box aangemeld het in gcloud en hul credentials in die lêerstelsel gelos het:

<details><summary>Search for gcloud credentials in filesystem</summary>
```
sudo find / -name "gcloud"
```
</details>

Dit is die mees interessante lêers:

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

### Meer API Keys regexes

<details><summary>Grep-patrone vir GCP credentials and keys</summary>
```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"
```
</details>

## Verwysings

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