# GCP - élévation de privilèges locale ssh pivoting

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

dans ce scénario, nous allons supposer que vous **avez compromis un compte non privilégié** à l'intérieur d'une VM dans un projet Compute Engine.

Étonnamment, les permissions GPC du compute engine que vous avez compromis peuvent vous aider à **escalader les privilèges localement à l'intérieur d'une machine**. Même si cela ne sera pas toujours très utile dans un environnement cloud, il est bon de savoir que c'est possible.

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

**Les instances de calcul** sont probablement là pour **exécuter des scripts** afin d'effectuer des actions avec leurs comptes de service.

Comme IAM est très granulaire, un compte peut avoir des privilèges **de lecture/écriture** sur une ressource mais **aucun privilège de liste**.

Un excellent exemple hypothétique de cela est une instance de calcul qui a la permission de lire/écrire des sauvegardes dans un bucket de stockage appelé `instance82736-long-term-xyz-archive-0332893`.

L'exécution de `gsutil ls` depuis la ligne de commande ne renvoie rien, car le compte de service manque de la permission IAM `storage.buckets.list`. Cependant, si vous exécutez `gsutil ls gs://instance82736-long-term-xyz-archive-0332893`, vous pourriez trouver une sauvegarde complète du système de fichiers, vous donnant un accès en texte clair aux données dont votre compte Linux local manque.

Vous pourriez être en mesure de trouver ce nom de bucket à l'intérieur d'un script (en bash, Python, Ruby...).

## Métadonnées personnalisées

Les administrateurs peuvent ajouter [des métadonnées personnalisées](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) au **niveau de l'instance** et au **niveau du projet**. C'est simplement un moyen de passer **des paires clé/valeur arbitraires dans une instance**, et est couramment utilisé pour les variables d'environnement et les scripts de démarrage/arrêt.

De plus, il est possible d'ajouter **des userdata**, qui est un script qui sera **exécuté à chaque fois** que la machine est démarrée ou redémarrée et qui peut être **accédé depuis le point de terminaison des métadonnées également.**

Pour plus d'infos, consultez :

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

## **Abus des permissions IAM**

La plupart des permissions proposées suivantes sont **données au SA Compute par défaut,** le seul problème est que le **scope d'accès par défaut empêche le SA de les utiliser**. Cependant, si le **scope `cloud-platform`** est activé ou juste le **scope `compute`** est activé, vous serez **capable de les abuser**.

Vérifiez les permissions suivantes :

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

## Rechercher des clés dans le système de fichiers

Vérifiez si d'autres utilisateurs se sont connectés à gcloud à l'intérieur de la boîte et ont laissé leurs identifiants dans le système de fichiers :
```
sudo find / -name "gcloud"
```
Voici les fichiers les plus intéressants :

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

### Plus de regex pour les clés API
```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"
```
## Références

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