GCP - BigQuery Privesc
BigQuery
Para mais informações sobre BigQuery, confira:
GCP - Bigquery EnumLer 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
:
Export data
Esta é outra maneira de acessar os dados. Exporte-os para um bucket de cloud storage e baixe os arquivos com as informações.
Para realizar esta ação, são necessárias as seguintes permissões: bigquery.tables.export
, bigquery.jobs.create
e storage.objects.create
.
Insert data
Pode ser possível introduzir certos dados confiáveis em uma tabela Bigquery para abusar de uma vulnerabilidade em outro lugar. Isso pode ser facilmente feito com as permissões bigquery.tables.get
, bigquery.tables.updateData
e bigquery.jobs.create
:
bigquery.datasets.setIamPolicy
bigquery.datasets.setIamPolicy
Um atacante poderia abusar deste privilégio para dar a si mesmo permissões adicionais sobre um dataset do BigQuery:
bigquery.datasets.update
, (bigquery.datasets.get
)
bigquery.datasets.update
, (bigquery.datasets.get
)Apenas esta permissão permite atualizar seu acesso a um dataset do BigQuery modificando as ACLs que indicam quem pode acessá-lo:
bigquery.tables.setIamPolicy
bigquery.tables.setIamPolicy
Um atacante poderia abusar deste privilégio para dar a si mesmo permissões adicionais sobre uma tabela BigQuery:
bigquery.rowAccessPolicies.update
, bigquery.rowAccessPolicies.setIamPolicy
, bigquery.tables.getData
, bigquery.jobs.create
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
.
É possível encontrar o ID do filtro na saída da enumeração das políticas de linha. Exemplo:
Se você tiver bigquery.rowAccessPolicies.delete
em vez de bigquery.rowAccessPolicies.update
, você também pode simplesmente deletar a política:
Outra opção potencial para contornar políticas de acesso a linhas seria simplesmente alterar o valor dos dados restritos. Se você só pode ver quando term
é Cfba
, basta modificar todos os registros da tabela para ter term = "Cfba"
. No entanto, isso é prevenido pelo bigquery.
Last updated