AWS - IAM & STS Unauthenticated Enum
Απαρίθμηση Ρόλων και Ονομάτων Χρηστών σε ένα λογαριασμό
Βίαιη Δοκιμή Ρόλου
Αυτή η τεχνική δεν λειτουργεί πλέον, καθώς ανεξάρτητα από το αν υπάρχει ο ρόλος ή όχι, λαμβάνετε πάντα αυτό το σφάλμα:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas
Μπορείτε να δοκιμάσετε αυτό εκτελώντας:
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Η προσπάθεια να δοθεί ρόλος χωρίς τις απαραίτητες άδειες ενεργοποιεί ένα μήνυμα σφάλματος από το AWS. Για παράδειγμα, αν δεν έχετε την απαραίτητη άδεια, το AWS μπορεί να επιστρέψει:
Αυτό το μήνυμα επιβεβαιώνει την ύπαρξη του ρόλου, αλλά υποδεικνύει ότι η πολιτική assume role του δεν επιτρέπει την υπόθεσή σας. Αντίθετα, η προσπάθεια να υποθέσετε έναν μη υπαρκτό ρόλο οδηγεί σε διαφορετικό σφάλμα:
Ενδιαφέροντα, αυτή η μέθοδος για διάκριση μεταξύ υπαρκτών και μη υπαρκτών ρόλων είναι εφαρμόσιμη ακόμα και σε διάφορους λογαριασμούς AWS. Με ένα έγκυρο αναγνωριστικό λογαριασμού AWS και μια στοχευμένη λίστα λέξεων, μπορεί κανείς να απαριθμήσει τους ρόλους που υπάρχουν στον λογαριασμό χωρίς να αντιμετωπίζει κάποιο περιορισμό.
Μπορείτε να χρησιμοποιήσετε αυτό το σενάριο για να απαριθμήσετε δυνητικούς πρωταρχικούς καταχρώντας αυτό το πρόβλημα.
Πολιτικές εμπιστοσύνης: Βίαιη αναζήτηση διασυνοριακών ρόλων και χρηστών
Η διαμόρφωση ή ενημέρωση της πολιτικής εμπιστοσύνης ενός ρόλου IAM περιλαμβάνει τον καθορισμό των AWS πόρων ή υπηρεσιών που επιτρέπεται να υιοθετήσουν αυτόν τον ρόλο και να λάβουν προσωρινές πιστοποιήσεις. Εάν ο καθορισμένος πόρος στην πολιτική υπάρχει, η πολιτική εμπιστοσύνης αποθηκεύεται επιτυχώς. Ωστόσο, εάν ο πόρος δεν υπάρχει, δημιουργείται ένα σφάλμα, που υποδεικνύει ότι δόθηκε ένας μη έγκυρος πρωταρχικός.
Σημειώστε ότι σε αυτόν τον πόρο μπορείτε να καθορίσετε έναν διασυνοριακό ρόλο ή χρήστη:
arn:aws:iam::acc_id:role/role_name
arn:aws:iam::acc_id:user/user_name
Αυτό είναι ένα παράδειγμα πολιτικής:
Γραφική διεπαφή (GUI)
Αυτό είναι το σφάλμα που θα συναντήσετε εάν χρησιμοποιήσετε έναν ρόλο που δεν υπάρχει. Εάν ο ρόλος υπάρχει, η πολιτική θα αποθηκευτεί χωρίς κανένα σφάλμα. (Το σφάλμα είναι για ενημέρωση, αλλά λειτουργεί επίσης κατά τη δημιουργία)
Εντολική γραμμή (CLI)
Μπορείτε να αυτοματοποιήσετε αυτήν τη διαδικασία με το https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Ή χρησιμοποιώντας το Pacu:
run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
Ο ρόλος
admin
που χρησιμοποιείται στο παράδειγμα είναι ένας ρόλος στον λογαριασμό σας που θα προσομοιωθεί από το pacu για να δημιουργήσει τις πολιτικές που χρειάζεται για την απαρίθμηση
Ανέβασμα δικαιωμάτων
Στην περίπτωση που ο ρόλος έχει κακή διαμόρφωση και επιτρέπει σε οποιονδήποτε να τον υποθέσει:
Ο επιτιθέμενος μπορεί απλά να υποθέσει αυτό.
Τρίτος Φορέας OIDC Federation
Φανταστείτε ότι καταφέρνετε να διαβάσετε ένα Github Actions workflow που έχει πρόσβαση σε ένα ρόλο μέσα στο AWS. Αυτή η εμπιστοσύνη μπορεί να δώσει πρόσβαση σε ένα ρόλο με την ακόλουθη πολιτική εμπιστοσύνης:
Αυτή η πολιτική εμπιστοσύνης μπορεί να είναι σωστή, αλλά η έλλειψη περισσότερων συνθηκών θα πρέπει να σας κάνει να την αμφισβητείτε. Αυτό συμβαίνει επειδή ο προηγούμενος ρόλος μπορεί να υποθέσει ΟΠΟΙΟΣΔΗΠΟΤΕ από το Github Actions! Θα πρέπει να καθορίσετε στις συνθήκες και άλλα πράγματα, όπως το όνομα του οργανισμού, το όνομα του αποθετηρίου, το περιβάλλον, το όνομα του κλαδιού...
Μια άλλη πιθανή λανθασμένη ρύθμιση είναι να προσθέσετε μια συνθήκη όπως η παρακάτω:
Σημείωση ότι υπάρχει ένας μπαλαντέρ (*) πριν από τη άνω κάθετο (:). Μπορείτε να δημιουργήσετε μια οργάνωση όπως org_name1 και να υποθέσετε τον ρόλο από μια ενέργεια του Github.
Αναφορές
Last updated