GCP - IAM Privesc
IAM
Βρείτε περισσότερες πληροφορίες σχετικά με το IAM στο:
GCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)
iam.roles.update
(iam.roles.get
)Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να ενημερώσει έναν ρόλο που σας έχει ανατεθεί και να σας δώσει επιπλέον δικαιώματα σε άλλους πόρους όπως:
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα σε Python για την κατάχρηση αυτού του προνομίου εδώ. Για περισσότερες πληροφορίες, ανατρέξτε στην αρχική έρευνα.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να ζητήσει ένα access token που ανήκει σε έναν λογαριασμό υπηρεσίας, οπότε είναι δυνατόν να ζητηθεί ένα access token ενός λογαριασμού υπηρεσίας με περισσότερα προνόμια από τα δικά μας.
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα σε Python για την κατάχρηση αυτού του προνομίου εδώ. Για περισσότερες πληροφορίες, ανατρέξτε στην αρχική έρευνα.
iam.serviceAccountKeys.create
iam.serviceAccountKeys.create
Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να δημιουργήσει ένα κλειδί που διαχειρίζεται ο χρήστης για έναν λογαριασμό υπηρεσίας, το οποίο θα μας επιτρέπει να έχουμε πρόσβαση στο GCP ως αυτός ο λογαριασμός υπηρεσίας.
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.
Σημειώστε ότι iam.serviceAccountKeys.update
δεν λειτουργεί για την τροποποίηση του κλειδιού ενός Λογαριασμού Υπηρεσίας επειδή για να το κάνετε αυτό, απαιτείται επίσης η άδεια iam.serviceAccountKeys.create
.
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.implicitDelegation
Εάν έχετε την άδεια iam.serviceAccounts.implicitDelegation
σε έναν Λογαριασμό Υπηρεσίας που έχει την άδεια iam.serviceAccounts.getAccessToken
σε έναν τρίτο Λογαριασμό Υπηρεσίας, τότε μπορείτε να χρησιμοποιήσετε την implicitDelegation για να δημιουργήσετε ένα τοκέαν για αυτόν τον τρίτο Λογαριασμό Υπηρεσίας. Εδώ υπάρχει ένα διάγραμμα για να βοηθήσει στην εξήγηση.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Frhinosecuritylabs.com%2Fwp-content%2Fuploads%2F2020%2F04%2Fimage2-500x493.png&width=768&dpr=4&quality=100&sign=eb0da8c5&sv=1)
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.
Σημειώστε ότι σύμφωνα με την τεκμηρίωση, η ανάθεση λειτουργεί μόνο για τη δημιουργία ενός τοκέαν χρησιμοποιώντας τη μέθοδο generateAccessToken().
iam.serviceAccounts.signBlob
iam.serviceAccounts.signBlob
Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να υπογράφει αυθαίρετα φορτία στο GCP. Έτσι, θα είναι δυνατόν να δημιουργήσει ένα μη υπογεγραμμένο JWT του Λογαριασμού Υπηρεσίας και στη συνέχεια να το στείλει ως ένα blob για να υπογραφεί το JWT από τον Λογαριασμό Υπηρεσίας που στοχεύουμε. Για περισσότερες πληροφορίες διαβάστε αυτό.
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ και εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.
iam.serviceAccounts.signJwt
iam.serviceAccounts.signJwt
Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να υπογράφει καλοσχηματισμένα JSON web tokens (JWTs). Η διαφορά με την προηγούμενη μέθοδο είναι ότι αντί να κάνει τη Google να υπογράψει ένα blob που περιέχει ένα JWT, χρησιμοποιούμε τη μέθοδο signJWT που αναμένει ήδη ένα JWT. Αυτό καθιστά τη χρήση ευκολότερη, αλλά μπορείτε να υπογράψετε μόνο JWT αντί για οποιαδήποτε bytes.
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.
iam.serviceAccounts.setIamPolicy
iam.serviceAccounts.setIamPolicy
Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να προσθέτει πολιτικές IAM σε λογαριασμούς υπηρεσίας. Μπορείτε να το καταχραστείτε για να χορηγήσετε στον εαυτό σας τις άδειες που χρειάζεστε για να προσομοιώσετε τον λογαριασμό υπηρεσίας. Στο παρ
Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ.
iam.serviceAccounts.actAs
iam.serviceAccounts.actAs
Η άδεια iam.serviceAccounts.actAs είναι παρόμοια με την άδεια iam:PassRole από το AWS. Είναι απαραίτητη για την εκτέλεση εργασιών, όπως η έναρξη μιας εικονικής μηχανής Compute Engine, καθώς παρέχει τη δυνατότητα "να ενεργήσει ως" ένας λογαριασμός υπηρεσίας, εξασφαλίζοντας έτσι την ασφαλή διαχείριση των δικαιωμάτων. Χωρίς αυτό, οι χρήστες μπορεί να αποκτήσουν μη δικαιολογημένη πρόσβαση. Επιπλέον, η εκμετάλλευση της iam.serviceAccounts.actAs περιλαμβάνει διάφορες μεθόδους, καθεμία από τις οποίες απαιτεί ένα σύνολο από δικαιώματα, σε αντίθεση με άλλες μεθόδους που χρειάζονται μόνο ένα.
Προσομοίωση λογαριασμού υπηρεσίας
Η προσομοίωση ενός λογαριασμού υπηρεσίας μπορεί να είναι πολύ χρήσιμη για την απόκτηση νέων και καλύτερων δικαιωμάτων. Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να προσομοιώσετε έναν άλλο λογαριασμό υπηρεσίας:
Πιστοποίηση χρησιμοποιώντας ιδιωτικά κλειδιά RSA (καλύπτεται παραπάνω)
Εξουσιοδότηση χρησιμοποιώντας πολιτικές Cloud IAM (καλύπτεται εδώ)
Ανάπτυξη εργασιών σε υπηρεσίες GCP (περισσότερο εφαρμόσιμο στην παραβίαση ενός λογαριασμού χρήστη)
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.getOpenIdToken
Ένας επιτιθέμενος με τις αναφερόμενες δικαιώματα θα μπορεί να δημιουργήσει ένα OpenID JWT. Αυτά χρησιμοποιούνται για να επιβεβαιώσουν την ταυτότητα και δεν απαιτούν απαραίτητα κάποια συναφή εξουσιοδότηση για ένα πόρο.
Σύμφωνα με αυτήν την ενδιαφέρουσα ανάρτηση, είναι απαραίτητο να υποδείξετε το κοινό (υπηρεσία όπου θέλετε να χρησιμοποιήσετε το τοκέν για την πιστοποίηση) και θα λάβετε ένα JWT που έχει υπογραφεί από την Google και υποδεικνύει τον λογαριασμό υπηρεσίας και το κοινό του JWT.
Μπορείτε να δημιουργήσετε ένα OpenIDToken (αν έχετε πρόσβαση) με:
Στη συνέχεια, μπορείτε απλά να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στην υπηρεσία με:
Ορισμένες υπηρεσίες που υποστηρίζουν την πιστοποίηση μέσω αυτού του είδους των διακριτικών είναι:
Google Cloud Endpoints (εάν χρησιμοποιείται Google OIDC)
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να δημιουργήσετε ένα καινούργιο διακριτικό OpenID εκ μέρους ενός λογαριασμού υπηρεσίας εδώ.
Αναφορές
Last updated