# 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 est une plateforme de calcul gérée sans serveur qui vous permet de **faire fonctionner des conteneurs** directement sur l'infrastructure évolutive de Google.

Vous pouvez exécuter votre conteneur ou si vous utilisez Go, Node.js, Python, Java, .NET Core ou Ruby, vous pouvez utiliser l'option de [déploiement basé sur le code source](https://cloud.google.com/run/docs/deploying-source-code) qui **construit le conteneur pour vous.**

Google a conçu Cloud Run pour **bien fonctionner avec d'autres services sur Google Cloud**, afin que vous puissiez créer des applications complètes.

### Services et travaux <a href="#services-and-jobs" id="services-and-jobs"></a>

Sur Cloud Run, votre code peut soit s'exécuter en continu en tant que _**service**_, soit en tant que _**travail**_. Les services et les travaux s'exécutent dans le même environnement et peuvent utiliser les mêmes intégrations avec d'autres services sur Google Cloud.

- **Services Cloud Run.** Utilisés pour exécuter du code qui répond à des requêtes web ou à des événements.
- **Travaux Cloud Run.** Utilisés pour exécuter du code qui effectue un travail (un travail) et se termine lorsque le travail est terminé.

## Service Cloud Run

Google [Cloud Run](https://cloud.google.com/run) est une autre offre sans serveur où vous pouvez également rechercher des variables d'environnement. Cloud Run crée un petit serveur web, fonctionnant par défaut sur le port 8080 à l'intérieur du conteneur, qui attend une requête HTTP GET. Lorsque la requête est reçue, un travail est exécuté et le journal du travail est renvoyé via une réponse HTTP.

### Détails pertinents

- Par **défaut**, l'**accès** au serveur web est **public**, mais il peut également être **limité au trafic interne** (VPC...)\
De plus, l'**authentification** pour contacter le serveur web peut être **permettre à tous** ou **exiger une authentification via IAM**.
- Par défaut, le **chiffrement** utilise une **clé gérée par Google**, mais une **CMEK** (Customer Managed Encryption Key) de **KMS** peut également être **choisie**.
- Par **défaut**, le **compte de service** utilisé est le **compte par défaut de Compute Engine** qui a un accès **Éditeur** sur le projet et il a le **scope `cloud-platform`.**
- Il est possible de définir des **variables d'environnement en texte clair** pour l'exécution, et même **monter des secrets cloud** ou **ajouter des secrets cloud aux variables d'environnement.**
- Il est également possible d'**ajouter des connexions avec Cloud SQL** et **monter un système de fichiers.**
- Les **URLs** des services déployés sont similaires à **`https://<svc-name>-<random>.a.run.app`**
- Un service Run peut avoir **plus d'une version ou révision**, et **diviser le trafic** entre plusieurs révisions.

### Énumération
```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

Les jobs Cloud Run sont mieux adaptés pour **des conteneurs qui s'exécutent jusqu'à leur achèvement et ne servent pas de requêtes**. Les jobs n'ont pas la capacité de servir des requêtes ou d'écouter sur un port. Cela signifie qu'à la différence des services Cloud Run, les jobs ne doivent pas inclure un serveur web. Au lieu de cela, les conteneurs de jobs doivent se terminer lorsqu'ils ont fini. 

### 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>
```
## Escalade de Privilèges

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions de cloud run pour escalader les privilèges** :

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

## Accès Non Authentifié

{{#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}}

## Persistance

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

## Références

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