# GCP - Sourcerepos Privesc

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

## Source Repositories

Per maggiori informazioni su Source Repositories consulta:

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

### `source.repos.get`

Con questo permesso è possibile scaricare il repository localmente:

<details><summary>Clone source repository</summary>
```bash
gcloud source repos clone <repo-name> --project=<project-uniq-name>
```
</details>

### `source.repos.update`

Un principal con questo permesso **potrà scrivere codice all'interno di un repository clonato con `gcloud source repos clone <repo>`**. Nota però che questo permesso non può essere associato a ruoli custom, quindi deve essere concesso tramite un ruolo predefinito come:

- Owner
- Editor
- Source Repository Administrator (`roles/source.admin`)
- Source Repository Writer (`roles/source.writer`)

Per scrivere esegui semplicemente un normale **`git push`**.

### `source.repos.setIamPolicy`

Con questo permesso un attacker potrebbe concedersi i permessi precedenti.

### Accesso ai secret

Se l'attacker ha **accesso ai secret** dove sono memorizzati i token, potrà rubarli. Per maggiori informazioni su come accedere a un secret controlla:

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

### Aggiungere chiavi SSH

È possibile **aggiungere chiavi SSH al progetto Source Repository** nella web console. Fa una richiesta POST a **`/v1/sshKeys:add`** e può essere configurato in [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys)

Una volta che la tua chiave SSH è impostata, puoi accedere a un repo con:

<details><summary>Clonare il repository usando SSH</summary>
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p/<proj-name>/r/<repo-name>
```
</details>

E poi usare i comandi **`git`** come al solito.

### Credenziali manuali

È possibile creare credenziali manuali per accedere a Source Repositories:

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

Cliccando sul primo link verrai indirizzato a [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)

Questo mostrerà una **finestra di autorizzazione OAuth** per dare accesso a **Google Cloud Development**. Quindi ti serviranno o le **credenziali dell'utente** o una **sessione aperta nel browser**.

Questo ti porterà a una pagina con uno **script bash da eseguire** che configurerà un git cookie in **`$HOME/.gitcookies`**

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

Eseguendo lo script potrai poi usare git clone, push... e funzionerà.

### `source.repos.updateProjectConfig`

Con questo permesso è possibile disabilitare la protezione predefinita di Source Repositories che impedisce di caricare codice contenente chiavi private:

<details><summary>Disabilitare pushblock e modificare la configurazione pub/sub</summary>
```bash
gcloud source project-configs update --disable-pushblock
```
Puoi anche configurare un diverso pub/sub topic o addirittura disabilitarlo completamente:
```bash
gcloud source project-configs update --remove-topic=REMOVE_TOPIC
gcloud source project-configs update --remove-topic=UPDATE_TOPIC
```
</details>

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