# GCP Pentesting

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

## Informazioni di base

**Prima di iniziare il pentesting** di un **ambiente GCP**, ci sono alcune **cose di base che devi sapere** su come funziona per aiutarti a capire cosa devi fare, come trovare misconfigurazioni e come sfruttarle.

Concetti come **gerarchia** dell'**organizzazione**, **permessi** e altri concetti di base sono spiegati in:

{{#ref}}
gcp-basic-information/
{{#endref}}

## Laboratori per imparare

- [https://gcpgoat.joshuajebaraj.com/](https://gcpgoat.joshuajebaraj.com/)
- [https://github.com/ine-labs/GCPGoat](https://github.com/ine-labs/GCPGoat)
- [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/)
- [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts)

## Metodologia GCP Pentester/Red Team

Per auditare un ambiente GCP è molto importante sapere: quali **servizi vengono utilizzati**, cosa è **esposto**, chi ha **accesso** a cosa e come sono connessi i servizi GCP interni e i **servizi esterni**.

Dal punto di vista di un Red Team, il **primo passo per compromettere un ambiente GCP** è riuscire a ottenere alcune **credenziali**. Qui hai alcune idee su come farlo:

- **Leak** su github (o simili) - OSINT
- **Ingegneria** Sociale (Controlla la pagina [**Sicurezza di Workspace**](../workspace-security/index.html))
- Riutilizzo della **Password** (leak di password)
- Vulnerabilità nelle Applicazioni Ospitate su GCP
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con accesso all'endpoint dei metadati
- **Lettura di File Locali**
- `/home/USERNAME/.config/gcloud/*`
- `C:\Users\USERNAME\.config\gcloud\*`
- **breach** di terze parti
- **Dipendente** Interno

Oppure compromettendo un servizio **non autenticato** esposto:

{{#ref}}
gcp-unauthenticated-enum-and-access/
{{#endref}}

O se stai facendo una **revisione** potresti semplicemente **chiedere le credenziali** con questi ruoli:

{{#ref}}
gcp-permissions-for-a-pentest.md
{{#endref}}

> [!NOTE]
> Dopo aver ottenuto le credenziali, devi sapere **a chi appartengono quelle credenziali**, e **a cosa hanno accesso**, quindi devi eseguire alcune enumerazioni di base:

## Enumerazione di Base

### **SSRF**

Per ulteriori informazioni su come **enumerare i metadati GCP** controlla la seguente pagina di hacktricks:

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

### Whoami

In GCP puoi provare diverse opzioni per cercare di indovinare chi sei:
```bash
#If you are inside a compromise machine
gcloud auth list
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo
gcloud auth print-identity-token #Get info from the token

#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo
```
Puoi anche utilizzare l'endpoint API `/userinfo` per ottenere ulteriori informazioni sull'utente:
```bash
curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth <access_token>" https://www.googleapis.com/oauth2/v1/userinfo
```
### Enumerazione dell'Org
```bash
# Get organizations
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects
```
### Principali & Enumerazione IAM

Se hai abbastanza permessi, **controllare i privilegi di ciascuna entità all'interno dell'account GCP** ti aiuterà a capire cosa puoi fare e cosa possono fare altre identità e come **escalare i privilegi**.

Se non hai abbastanza permessi per enumerare IAM, puoi **rubare e forzare** per scoprirli.\
Controlla **come fare l'enumerazione e il brute-forcing** in:

{{#ref}}
gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}

> [!NOTE]
> Ora che **hai alcune informazioni sulle tue credenziali** (e se sei un red team speriamo che **non sei stato rilevato**). È tempo di scoprire quali servizi vengono utilizzati nell'ambiente.\
> Nella sezione seguente puoi controllare alcuni modi per **enumerare alcuni servizi comuni.**

## Enumerazione dei Servizi

GCP ha un numero straordinario di servizi, nella pagina seguente troverai **informazioni di base, cheatsheets di enumerazione**, come **evitare il rilevamento**, ottenere **persistenza** e altri trucchi di **post-exploitation** su alcuni di essi:

{{#ref}}
gcp-services/
{{#endref}}

Nota che **non** è necessario eseguire tutto il lavoro **manualmente**, qui sotto in questo post puoi trovare una **sezione su** [**strumenti automatici**](#automatic-tools).

Inoltre, in questa fase potresti aver scoperto **più servizi esposti a utenti non autenticati**, potresti essere in grado di sfruttarli:

{{#ref}}
gcp-unauthenticated-enum-and-access/
{{#endref}}

## Escalation dei Privilegi, Post Exploitation & Persistenza

Il modo più comune una volta ottenute alcune credenziali cloud o compromesso un servizio in esecuzione all'interno di un cloud è **abusare dei privilegi mal configurati** che l'account compromesso potrebbe avere. Quindi, la prima cosa che dovresti fare è enumerare i tuoi privilegi.

Inoltre, durante questa enumerazione, ricorda che **i permessi possono essere impostati al livello più alto di "Organizzazione"**.

{{#ref}}
gcp-privilege-escalation/
{{#endref}}

{{#ref}}
gcp-post-exploitation/
{{#endref}}

{{#ref}}
gcp-persistence/
{{#endref}}

### Servizi Esposti Pubblicamente

Durante l'enumerazione dei servizi GCP potresti aver trovato alcuni di essi **esponendo elementi a Internet** (porte VM/Container, database o servizi di coda, snapshot o bucket...).\
Come pentester/red teamer dovresti sempre controllare se puoi trovare **informazioni sensibili / vulnerabilità** su di essi poiché potrebbero fornirti **ulteriore accesso all'account AWS**.

In questo libro dovresti trovare **informazioni** su come trovare **servizi GCP esposti e come controllarli**. Per quanto riguarda come trovare **vulnerabilità nei servizi di rete esposti**, ti consiglio di **cercare** il **servizio** specifico in:

{{#ref}}
https://book.hacktricks.wiki/
{{#endref}}

## GCP <--> Workspace Pivoting

**Compromettere** i principi in **una** piattaforma potrebbe consentire a un attaccante di **compromettere l'altra**, controllalo in:

{{#ref}}
gcp-to-workspace-pivoting/
{{#endref}}

## Strumenti Automatici

- Nella **console GCloud**, in [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) puoi vedere le risorse e gli IAM utilizzati dal progetto.
- Qui puoi vedere gli asset supportati da questa API: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types)
- Controlla **strumenti** che possono essere [**utilizzati in diversi cloud qui**](../pentesting-cloud-methodology.md).
- [**gcp_scanner**](https://github.com/google/gcp_scanner): Questo è uno scanner di risorse GCP che può aiutare a determinare quale **livello di accesso possiedono certe credenziali** su GCP.
```bash
# Install
git clone https://github.com/google/gcp_scanner.git
cd gcp_scanner
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
```
- [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Script Bash per enumerare un ambiente GCP utilizzando gcloud cli e salvando i risultati in un file.
- [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Script per enumerare privilegi IAM elevati e per escalare privilegi in GCP abusandone (non sono riuscito a far funzionare lo script di enumerazione).
- [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Script per forzare le tue autorizzazioni.

## gcloud config & debug
```bash
# Login so gcloud can use your credentials
gcloud auth login
gcloud config set project security-devbox
gcloud auth print-access-token

# Login so SDKs can use your user credentials
gcloud auth application-default login
gcloud auth application-default set-quota-project security-devbox
gcloud auth application-default print-access-token

# Update gcloud
gcloud components update
```
### Cattura gcloud, gsutil... rete

Ricorda che puoi usare il **parametro** **`--log-http`** con il **`gcloud`** cli per **stampare** le **richieste** che lo strumento sta eseguendo. Se non vuoi che i log oscurino il valore del token, usa `gcloud config set log_http_redact_token false`

Inoltre, per intercettare la comunicazione:
```bash
gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 8080
gcloud config set proxy/type http
gcloud config set auth/disable_ssl_validation True

# If you don't want to completely disable ssl_validation use:
gcloud config set core/custom_ca_certs_file cert.pem

# Back to normal
gcloud config unset proxy/address
gcloud config unset proxy/port
gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file
```
### Configurazione del token OAuth in gcloud

Per **utilizzare un token OAuth di un account di servizio esfiltrato dall'endpoint dei metadati** puoi semplicemente fare:
```bash
# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file
```
## Riferimenti

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