# GCP - Cloud Run Enum

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

## Cloud Run <a href="#reviewing-cloud-run-configurations" id="reviewing-cloud-run-configurations"></a>

Cloud Run è una piattaforma di calcolo gestita senza server che ti consente di **eseguire container** direttamente sulla scalabile infrastruttura di Google.

Puoi eseguire il tuo container o, se stai usando Go, Node.js, Python, Java, .NET Core o Ruby, puoi utilizzare l'opzione di [deployment basato su sorgente](https://cloud.google.com/run/docs/deploying-source-code) che **costruisce il container per te.**

Google ha costruito Cloud Run per **funzionare bene insieme ad altri servizi su Google Cloud**, così puoi costruire applicazioni complete.

### Servizi e lavori <a href="#services-and-jobs" id="services-and-jobs"></a>

Su Cloud Run, il tuo codice può essere eseguito continuamente come un _**servizio**_ o come un _**lavoro**_. Sia i servizi che i lavori vengono eseguiti nello stesso ambiente e possono utilizzare le stesse integrazioni con altri servizi su Google Cloud.

- **Servizi Cloud Run.** Utilizzati per eseguire codice che risponde a richieste web o eventi.
- **Lavori Cloud Run.** Utilizzati per eseguire codice che svolge un lavoro (un lavoro) e termina quando il lavoro è completato.

## Servizio Cloud Run

Google [Cloud Run](https://cloud.google.com/run) è un'altra offerta senza server dove puoi cercare anche variabili d'ambiente. Cloud Run crea un piccolo server web, in esecuzione sulla porta 8080 all'interno del container per impostazione predefinita, che rimane in attesa di una richiesta HTTP GET. Quando la richiesta viene ricevuta, viene eseguito un lavoro e il log del lavoro viene restituito tramite una risposta HTTP.

### Dettagli rilevanti

- Per **impostazione predefinita**, l'**accesso** al server web è **pubblico**, ma può anche essere **limitato al traffico interno** (VPC...)\
Inoltre, l'**autenticazione** per contattare il server web può essere **consentita a tutti** o **richiedere autenticazione tramite IAM**.
- Per impostazione predefinita, la **crittografia** utilizza una **chiave gestita da Google**, ma può anche essere **scelta** una **CMEK** (Customer Managed Encryption Key) da **KMS**.
- Per **impostazione predefinita**, l'**account di servizio** utilizzato è il **predefinito di Compute Engine** che ha accesso **Editor** sul progetto e ha il **scope `cloud-platform`.**
- È possibile definire **variabili d'ambiente in chiaro** per l'esecuzione, e persino **montare segreti cloud** o **aggiungere segreti cloud alle variabili d'ambiente.**
- È anche possibile **aggiungere connessioni con Cloud SQL** e **montare un file system.**
- Gli **URL** dei servizi distribuiti sono simili a **`https://<svc-name>-<random>.a.run.app`**
- Un Servizio Run può avere **più di 1 versione o revisione**, e **dividere il traffico** tra diverse revisioni.

### Enumerazione
```bash
# List services
gcloud run services list
gcloud run services list --platform=managed
gcloud run services list --platform=gke

# Get info of a service
gcloud run services describe --region <region> <svc-name>

# Get info of all the services together
gcloud run services list --format=yaml
gcloud run services list --platform=managed --format=json
gcloud run services list --platform=gke --format=json

# Get policy
gcloud run services get-iam-policy --region <region> <svc-name>

# Get revisions
gcloud run revisions list --region <region>
gcloud run revisions describe --region <region> <revision>

# Get domains
gcloud run domain-mappings list
gcloud run domain-mappings describe <name>

# Attempt to trigger a job unauthenticated
curl <url>

# Attempt to trigger a job with your current gcloud authorization
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" <url>
```
## Cloud Run Jobs

I lavori di Cloud Run sono più adatti per **container che vengono eseguiti fino al completamento e non servono richieste**. I lavori non hanno la capacità di servire richieste o ascoltare su una porta. Questo significa che, a differenza dei servizi Cloud Run, i lavori non dovrebbero includere un server web. Invece, i container dei lavori dovrebbero uscire quando hanno finito.

### Enumeration
```bash
gcloud beta run jobs list
gcloud beta run jobs describe --region <region> <job-name>
gcloud beta run jobs get-iam-policy --region <region> <job-name>
```
## Escalation dei privilegi

Nella pagina seguente, puoi controllare come **abusare dei permessi di cloud run per escalare i privilegi**:

{{#ref}}
../gcp-privilege-escalation/gcp-run-privesc.md
{{#endref}}

## Accesso non autenticato

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-run-unauthenticated-enum.md
{{#endref}}

## Post Exploitation

{{#ref}}
../gcp-post-exploitation/gcp-cloud-run-post-exploitation.md
{{#endref}}

## Persistenza

{{#ref}}
../gcp-persistence/gcp-cloud-run-persistence.md
{{#endref}}

## Riferimenti

- [https://cloud.google.com/run/docs/overview/what-is-cloud-run](https://cloud.google.com/run/docs/overview/what-is-cloud-run)

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