# GCP - Privilege Escalation

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

## GCP特権昇格の紹介 <a href="#introduction-to-gcp-privilege-escalation" id="introduction-to-gcp-privilege-escalation"></a>

GCPは他のクラウドと同様に、いくつかの**プリンシパル**（ユーザー、グループ、サービスアカウント）と、コンピュートエンジン、クラウドファンクションなどの**リソース**を持っています。\
次に、役割を介して、**リソースに対するこれらのプリンシパルへの権限が付与されます**。これは、GCPにおけるリソースに対するプリンシパルの権限を指定する方法です。\
特定の権限により、ユーザーはリソースやサードパーティのリソースに対して**さらに多くの権限を取得することができます**。これが**特権昇格**と呼ばれるものです（また、より多くの権限を得るための脆弱性の悪用も含まれます）。

したがって、GCPの特権昇格技術を**2つのグループ**に分けたいと思います：

- **プリンシパルへの特権昇格**：これにより、**別のプリンシパルを偽装する**ことができ、そのプリンシパルのすべての権限で行動できます。例：_getAccessToken_を悪用してサービスアカウントを偽装する。
- **リソース上の特権昇格**：これにより、**特定のリソースに対するより多くの権限を取得する**ことができます。例：_setIamPolicy_権限を悪用してクラウドファンクションをトリガーできるようにする。
- 一部の**リソース権限は、リソースに任意のサービスアカウントを添付することも可能です**。これは、SAを持つリソースを起動し、そのリソースにアクセスし、**SAトークンを盗む**ことができることを意味します。したがって、これはリソース昇格を介してプリンシパルに昇格することを可能にします。これは以前にいくつかのリソースで発生しましたが、現在は頻度が低くなっています（ただし、まだ発生する可能性があります）。

明らかに、最も興味深い特権昇格技術は**2番目のグループ**のものであり、これにより**すでにいくつかの権限を持っているリソースの外でより多くの権限を取得する**ことができます。ただし、**リソース内での昇格**は、**機密情報**や**他のプリンシパル**（SAのトークンを含む秘密を読むことによって）へのアクセスをもたらす可能性があることに注意してください。

> [!WARNING]
> GCPではサービスアカウントがプリンシパルと権限の両方であることにも注意することが重要です。したがって、SAの権限を昇格させることで、それを偽装することも可能になります。

> [!NOTE]
> 括弧内の権限は、`gcloud`を使用して脆弱性を悪用するために必要な権限を示しています。APIを介して悪用する場合は、これらは必要ないかもしれません。

## 特権昇格手法のための権限

これは、GCP内で特定のアクションを実行するために**特定の権限をテストする方法**です。

1. GitHubリポジトリをダウンロードします [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts)
2. tests/に新しいスクリプトを追加します

## アクセススコープのバイパス <a href="#bypassing-access-scopes" id="bypassing-access-scopes"></a>

GCPメタデータサービスから漏洩したSAのトークンには**アクセススコープ**があります。これらは、トークンが持つ**権限**に対する**制限**です。たとえば、トークンが**`https://www.googleapis.com/auth/cloud-platform`**スコープを持っている場合、すべてのGCPサービスに**完全アクセス**を持ちます。しかし、トークンが**`https://www.googleapis.com/auth/cloud-platform.read-only`**スコープを持っている場合、SAがIAMでより多くの権限を持っていても、すべてのGCPサービスに対して**読み取り専用アクセス**しか持ちません。

これらの権限をバイパスする直接的な方法はありませんが、妥協されたホスト内で**新しい資格情報**を探したり、**制限なしでOAuthトークンを生成するためのサービスキーを見つけたり、**制限の少ない別のVMに**ジャンプしたりすることができます。

[アクセススコープ](https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam)が使用されると、コンピューティングインスタンス（VM）用に生成されるOAuthトークンには**制限された**[**スコープ**](https://oauth.net/2/scope/)が含まれます。ただし、この制限を**バイパス**し、妥協されたアカウントが持つ権限を悪用できる可能性があります。

この制限を**バイパスする最良の方法**は、妥協されたホスト内で**新しい資格情報を見つけること**、**制限なしでOAuthトークンを生成するためのサービスキーを見つけること**、または**制限の少ない別のVMを妥協すること**です。

キーが生成されたSAを確認します：
```bash
for i in $(gcloud iam service-accounts list --format="table[no-heading](email)"); do
echo "Looking for keys for $i:"
gcloud iam service-accounts keys list --iam-account $i
done
```
## 権限昇格技術

AWSで権限を昇格させる方法は、他のサービスアカウント/ユーザー/グループの権限にアクセスできるだけの十分な権限を持つことです。昇格を連鎖させて、組織全体に対する管理者アクセスを得ることができます。

> [!WARNING]
> GCPには、エンティティに付与できる**数百**（場合によっては数千）の**権限**があります。この本では、**権限を昇格させるために悪用できるすべての権限**を見つけることができますが、ここに記載されていない**パスを知っている**場合は、**共有してください**。

**このセクションのサブページはサービスごとに整理されています。各サービスでは、サービス上で権限を昇格させるさまざまな方法を見つけることができます。**

### GCPを悪用してローカルで権限を昇格させる

GCP内のマシンにいる場合、権限を悪用してローカルで権限を昇格させることができるかもしれません：

{{#ref}}
gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}

## 参考文献

- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/#gcp-privesc-scanner)
- [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}}
