# GCP - Privilege Escalation

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

## Introduction to GCP Privilege Escalation <a href="#introduction-to-gcp-privilege-escalation" id="introduction-to-gcp-privilege-escalation"></a>

GCP, kao i svaka druga cloud platforma, ima neke **principale**: korisnike, grupe i servisne naloge, i neke **resurse** kao što su compute engine, cloud functions…\
Zatim, putem uloga, **dozvole se dodeljuju tim principima nad resursima**. Ovo je način da se specificiraju dozvole koje princip ima nad resursom u GCP-u.\
Postoje određene dozvole koje će omogućiti korisniku da **dobije još više dozvola** na resursu ili resursima trećih strana, i to se naziva **privilege escalation** (takođe, iskorišćavanje ranjivosti za dobijanje više dozvola).

Stoga, želeo bih da podelim tehnike eskalacije privilegija u GCP-u u **2 grupe**:

- **Privesc ka principu**: Ovo će vam omogućiti da **imituješ drugi princip**, i stoga delujete kao on sa svim njegovim dozvolama. npr.: Zloupotreba _getAccessToken_ za imitaciju servisnog naloga.
- **Privesc na resursu**: Ovo će vam omogućiti da **dobijete više dozvola nad specifičnim resursom**. npr.: možete zloupotrebiti _setIamPolicy_ dozvolu nad cloudfunctions da biste omogućili pokretanje funkcije.
- Imajte na umu da neke **dozvole resursa će vam takođe omogućiti da povežete proizvoljni servisni nalog** sa resursom. To znači da ćete moći da pokrenete resurs sa SA, uđete u resurs i **ukradete SA token**. Stoga, ovo će omogućiti eskalaciju ka principu putem eskalacije resursa. Ovo se ranije dešavalo na nekoliko resursa, ali sada je ređe (ali se i dalje može desiti).

Očigledno, najzanimljivije tehnike eskalacije privilegija su one iz **druge grupe** jer će vam omogućiti da **dobijete više privilegija van resursa nad kojima već imate** neke privilegije. Međutim, imajte na umu da **eskalacija u resursima** može takođe dati pristup **osetljivim informacijama** ili čak **drugim principima** (možda čitanjem tajne koja sadrži token SA).

> [!WARNING]
> Važno je napomenuti da su u **GCP servisni nalozi i principi i dozvole**, tako da će eskalacija privilegija u SA takođe omogućiti da ga imituješ.

> [!NOTE]
> Dozvole u zagradi označavaju dozvole potrebne za iskorišćavanje ranjivosti sa `gcloud`. One možda neće biti potrebne ako se iskorišćavaju putem API-ja.

## Permissions for Privilege Escalation Methodology

Ovo je kako ja **testiram za specifične dozvole** da bih izvršio specifične radnje unutar GCP-a.

1. Preuzmite github repo [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts)
2. Dodajte u tests/ novi skript

## Bypassing access scopes <a href="#bypassing-access-scopes" id="bypassing-access-scopes"></a>

Tokeni SA koji su procurili iz GCP metadata servisa imaju **access scopes**. Ovo su **ograničenja** na **dozvole** koje token ima. Na primer, ako token ima **`https://www.googleapis.com/auth/cloud-platform`** opseg, imaće **potpun pristup** svim GCP uslugama. Međutim, ako token ima **`https://www.googleapis.com/auth/cloud-platform.read-only`** opseg, imaće samo **pristup za čitanje** svim GCP uslugama čak i ako SA ima više dozvola u IAM-u.

Ne postoji direktan način da se zaobiđu ove dozvole, ali uvek možete pokušati da tražite **nove kredencijale** na kompromitovanom hostu, **pronađete servisni ključ** da generišete OAuth token bez ograničenja ili **preskočite na drugu VM manje ograničenu**.

Kada se koriste [access scopes](https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam), OAuth token koji se generiše za računar (VM) će **imati** [**opseg**](https://oauth.net/2/scope/) **ograničenje uključeno**. Međutim, možda ćete moći da **zaobiđete** ovo ograničenje i iskoristite dozvole koje ima kompromitovani nalog.

**Najbolji način da se zaobiđe** ovo ograničenje je ili da **pronađete nove kredencijale** na kompromitovanom hostu, da **pronađete servisni ključ za generisanje OAuth tokena** bez ograničenja ili da **kompromitujete drugu VM sa manje ograničenim SA**.

Proverite SA sa ključevima generisanim sa:
```bash
for i in $(gcloud iam service-accounts list --format="table[no-heading](email)"); do
echo "Looking for keys for $i:"
gcloud iam service-accounts keys list --iam-account $i
done
```
## Tehnike eskalacije privilegija

Način da eskalirate svoje privilegije u AWS-u je da imate dovoljno dozvola da, na neki način, pristupite privilegijama drugih servisnih naloga/korisnika/grupa. Povezivanje eskalacija dok ne dobijete administratorski pristup organizaciji.

> [!WARNING]
> GCP ima **stotine** (ako ne i hiljade) **dozvola** koje entitet može dobiti. U ovoj knjizi možete pronaći **sve dozvole koje znam** koje možete zloupotrebiti da **eskalirate privilegije**, ali ako **znate neki put** koji ovde nije pomenut, **molim vas podelite ga**.

**Podstranice ove sekcije su raspoređene po servisima. Na svakom servisu možete pronaći različite načine za eskalaciju privilegija na tim servisima.**

### Zloupotreba GCP-a za lokalnu eskalaciju privilegija

Ako ste unutar mašine u GCP-u, možda ćete moći da zloupotrebite dozvole za eskalaciju privilegija čak i lokalno:

{{#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/)
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/#gcp-privesc-scanner)
- [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}}
