# GCP - Sourcerepos Privesc

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

## Source Repositories

Vir meer inligting oor Source Repositories sien:

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

### `source.repos.get`

Met hierdie toestemming is dit moontlik om die repository plaaslik af te laai:

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

### `source.repos.update`

'n principal met hierdie toestemming **sal in staat wees om kode binne 'n repository te skryf wat met `gcloud source repos clone <repo>` gekloon is**. Let wel dat hierdie toestemming nie aan aangepaste rolle gekoppel kan word nie, dus moet dit gegee word via 'n vooraf gedefinieerde rol soos:

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

Om te kan skryf, voer bloot 'n gewone **`git push`** uit.

### `source.repos.setIamPolicy`

Met hierdie toestemming kan 'n aanvaller homself die vorige toestemmings toeken.

### Toegang tot secrets

As die aanvaller **toegang tot die secrets** het waar die tokens gestoor is, sal hy dit kan steel. Vir meer inligting oor hoe om toegang tot 'n secret te kry, kyk:

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

### Voeg SSH-sleutels by

Dit is moontlik om **SSH-sleutels by die Source Repository-projek te voeg** in die web-konsol. Dit maak 'n POST-versoek na **`/v1/sshKeys:add`** en kan gekonfigureer word by [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys)

Sodra jou SSH-sleutel gestel is, kan jy toegang tot 'n repo kry met:

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

En dan gebruik jy soos gewoonlik die **`git`**-opdragte.

### Manual Credentials

It's possible to create manual credentials to access the Source Repositories:

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

Clicking on the first link it will direct you to [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)

Dit sal 'n **Oauth authorization prompt** teweegbring om toegang aan **Google Cloud Development** te verleen. Jy sal dus óf die **credentials of the user** óf 'n **open session in the browser** hiervoor nodig hê.

This will send you to a page with a **bash script to execute** and configure a git cookie in **`$HOME/.gitcookies`**

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

Deur die script uit te voer kan jy dan git clone, push... gebruik en dit sal werk.

### `source.repos.updateProjectConfig`

With this permission it's possible to disable Source Repositories default protection to not upload code containing Private Keys:

<details><summary>Deaktiveer pushblock en wysig die pub/sub-konfigurasie</summary>
```bash
gcloud source project-configs update --disable-pushblock
```
Jy kan ook 'n ander pub/sub topic konfigureer of dit selfs heeltemal deaktiveer:
```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}}
