# GCP - Sourcerepos Privesc

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

## Source Repositories

For more information about Source Repositories check:

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

### `source.repos.get`

この権限があれば、リポジトリをローカルにダウンロードできます：

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

### `source.repos.update`

この権限を持つプリンシパルは、`gcloud source repos clone <repo>` でクローンした repository 内にコードを書き込むことができます。 ただし、この権限はカスタムロールに付与できないため、次のような既定のロールを通じて付与される必要があります：

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

実際に書き込むには、通常どおり **`git push`** を実行します。

### `source.repos.setIamPolicy`

この権限があれば、攻撃者は自身に前述の権限を付与することができます。

### シークレットへのアクセス

攻撃者がトークンが保存されている **シークレットにアクセスできる** 場合、それらを盗むことができます。シークレットへのアクセス方法の詳細は次を参照してください：

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

### SSH keys を追加

ウェブコンソールから **Source Repository プロジェクトに ssh keys を追加する** ことが可能です。これは **`/v1/sshKeys:add`** への POST リクエストを行い、[https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys) で設定できます。

ssh キーを設定すると、次の方法で repo にアクセスできます：

<details><summary>SSH を使って repository をクローン</summary>
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p/<proj-name>/r/<repo-name>
```
</details>

その後は通常どおり**`git`**コマンドを使用します。

### 手動クレデンシャル

Source Repositories にアクセスするための手動クレデンシャルを作成できます:

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

最初のリンクをクリックすると、[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) に移動します。

これにより**Oauth authorization prompt**が表示され、**Google Cloud Development**へのアクセス許可が求められます。したがって、これを行うには**credentials of the user**または**open session in the browser**のいずれかが必要です。

これにより、実行するための**bash script to execute**が記載されたページに移動し、git cookie が**`$HOME/.gitcookies`** に設定されます。

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

スクリプトを実行すると、その後 git clone、push... が使用できるようになります。

### `source.repos.updateProjectConfig`

この権限があれば、Source Repositories のデフォルト保護（Private Keys を含むコードのアップロードを制限する機能）を無効化することが可能です:

<details><summary>pushblock を無効化し、pub/sub の構成を変更する</summary>
```bash
gcloud source project-configs update --disable-pushblock
```
別の pub/sub topic を設定することも、完全に無効化することもできます:
```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}}
