GCP - BigQuery Privesc
BigQuery
Pour plus d'informations sur BigQuery, consultez :
GCP - Bigquery EnumLire une Table
Lire les informations stockées dans une table BigQuery peut permettre de trouver des informations sensibles. Pour accéder à ces informations, les permissions nécessaires sont bigquery.tables.get
, bigquery.jobs.create
et bigquery.tables.getData
:
Export data
C'est une autre façon d'accéder aux données. Exportez-les vers un bucket de cloud storage et téléchargez les fichiers avec les informations.
Pour effectuer cette action, les permissions suivantes sont nécessaires : bigquery.tables.export
, bigquery.jobs.create
et storage.objects.create
.
Insert data
Il pourrait être possible d'introduire certaines données de confiance dans une table Bigquery pour abuser d'une vulnérabilité ailleurs. Cela peut être facilement fait avec les permissions bigquery.tables.get
, bigquery.tables.updateData
et bigquery.jobs.create
:
bigquery.datasets.setIamPolicy
bigquery.datasets.setIamPolicy
Un attaquant pourrait abuser de ce privilège pour s'accorder des permissions supplémentaires sur un dataset BigQuery :
bigquery.datasets.update
, (bigquery.datasets.get
)
bigquery.datasets.update
, (bigquery.datasets.get
)Juste cette permission permet de mettre à jour votre accès à un dataset BigQuery en modifiant les ACLs qui indiquent qui peut y accéder :
bigquery.tables.setIamPolicy
bigquery.tables.setIamPolicy
Un attaquant pourrait abuser de ce privilège pour s'accorder des permissions supplémentaires sur une table 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
Selon la documentation, avec les permissions mentionnées, il est possible de mettre à jour une politique de ligne.
Cependant, en utilisant le cli bq
vous avez besoin de plus : bigquery.rowAccessPolicies.create
, bigquery.tables.get
.
Il est possible de trouver l'ID du filtre dans la sortie de l'énumération des politiques de ligne. Exemple :
Si vous avez bigquery.rowAccessPolicies.delete
au lieu de bigquery.rowAccessPolicies.update
, vous pouvez également simplement supprimer la politique :
Une autre option potentielle pour contourner les politiques d'accès aux lignes serait de simplement changer la valeur des données restreintes. Si vous ne pouvez voir que lorsque term
est Cfba
, modifiez simplement tous les enregistrements de la table pour avoir term = "Cfba"
. Cependant, cela est empêché par bigquery.
Last updated