# GCP - Sourcerepos Privesc

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

## Dépôts de code source

Pour plus d'informations sur les dépôts de code source, consultez :

{{#ref}}
../gcp-services/gcp-source-repositories-enum.md
{{#endref}}

### `source.repos.get`

Avec cette autorisation, il est possible de télécharger le dépôt localement :
```bash
gcloud source repos clone <repo-name> --project=<project-uniq-name>
```
### `source.repos.update`

Un principal avec cette permission **pourra écrire du code à l'intérieur d'un dépôt cloné avec `gcloud source repos clone <repo>`**. Mais notez que cette permission ne peut pas être attachée à des rôles personnalisés, elle doit donc être donnée via un rôle prédéfini comme :

- Propriétaire
- Éditeur
- Administrateur de dépôt source (`roles/source.admin`)
- Écrivain de dépôt source (`roles/source.writer`)

Pour écrire, il suffit d'effectuer un **`git push`** régulier.

### `source.repos.setIamPolicy`

Avec cette permission, un attaquant pourrait se donner les permissions précédentes.

### Accès aux secrets

Si l'attaquant a **accès aux secrets** où les jetons sont stockés, il pourra les voler. Pour plus d'informations sur la façon d'accéder à un secret, consultez :

{{#ref}}
gcp-secretmanager-privesc.md
{{#endref}}

### Ajouter des clés SSH

Il est possible d'**ajouter des clés ssh au projet de dépôt source** dans la console web. Cela effectue une requête POST à **`/v1/sshKeys:add`** et peut être configuré sur [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys)

Une fois votre clé ssh configurée, vous pouvez accéder à un dépôt avec :
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p/<proj-name>/r/<repo-name>
```
Et ensuite, utilisez les commandes **`git`** comme d'habitude.

### Identifiants Manuels

Il est possible de créer des identifiants manuels pour accéder aux Source Repositories :

<figure><img src="../../../images/image (324).png" alt=""><figcaption></figcaption></figure>

En cliquant sur le premier lien, vous serez dirigé vers [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3)

Ce qui affichera une **invite d'autorisation Oauth** pour donner accès à **Google Cloud Development**. Vous aurez donc besoin soit des **identifiants de l'utilisateur**, soit d'une **session ouverte dans le navigateur** pour cela.

Cela vous enverra à une page avec un **script bash à exécuter** et à configurer un cookie git dans **`$HOME/.gitcookies`**

<figure><img src="../../../images/image (323).png" alt=""><figcaption></figcaption></figure>

En exécutant le script, vous pourrez ensuite utiliser git clone, push... et cela fonctionnera.

### `source.repos.updateProjectConfig`

Avec cette permission, il est possible de désactiver la protection par défaut des Source Repositories pour ne pas télécharger de code contenant des clés privées :
```bash
gcloud source project-configs update --disable-pushblock
```
Vous pouvez également configurer un sujet pub/sub différent ou même le désactiver complètement :
```bash
gcloud source project-configs update --remove-topic=REMOVE_TOPIC
gcloud source project-configs update --remove-topic=UPDATE_TOPIC
```
{{#include ../../../banners/hacktricks-training.md}}
