AWS - IAM & STS Unauthenticated Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Καταγραφή ρόλων και ονομάτων χρηστών σε έναν λογαριασμό

Assume Role Brute-Force

Caution

Αυτή η τεχνική δεν λειτουργεί πια, καθώς είτε ο ρόλος υπάρχει είτε όχι πάντα λαμβάνετε αυτό το σφάλμα:

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

Η προσπάθεια να assume a role χωρίς τα απαραίτητα δικαιώματα προκαλεί μήνυμα σφάλματος από το AWS. Για παράδειγμα, αν δεν είστε εξουσιοδοτημένοι, το AWS μπορεί να επιστρέψει:

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS

Αυτό το μήνυμα επιβεβαιώνει την ύπαρξη του role αλλά υποδεικνύει ότι η assume role policy του δεν επιτρέπει την ανάληψή του από εσάς. Αντίθετα, η προσπάθεια να αναλάβετε ένα μη-υπαρκτό role οδηγεί σε διαφορετικό σφάλμα:

An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole

Ενδιαφέρον: αυτή η μέθοδος για τη διάκριση μεταξύ υπαρχόντων και μη-υπαρχόντων roles εφαρμόζεται ακόμη και σε διαφορετικούς AWS λογαριασμούς. Με ένα έγκυρο AWS account ID και μια στοχευμένη wordlist, μπορεί κανείς να απαριθμήσει τους roles που υπάρχουν στον λογαριασμό χωρίς να αντιμετωπίσει εγγενείς περιορισμούς.

You can use this script to enumerate potential principals abusing this issue.

Πολιτικές Εμπιστοσύνης: Brute-Force Cross Account roles and users

Η διαμόρφωση ή ενημέρωση της trust policy ενός IAM role περιλαμβάνει τον ορισμό ποια AWS resources ή services επιτρέπεται να assume αυτόν τον role και να αποκτήσουν temporary credentials. Εάν ο συγκεκριμένος resource στην policy exists, η trust policy αποθηκεύεται successfully. Ωστόσο, αν ο resource does not exist, παράγεται ένα error που υποδεικνύει ότι δόθηκε invalid principal.

Warning

Σημειώστε ότι σε αυτόν τον resource μπορείτε να καθορίσετε έναν cross account role ή user:

  • arn:aws:iam::acc_id:role/role_name
  • arn:aws:iam::acc_id:user/user_name

Αυτό είναι ένα παράδειγμα policy:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}

GUI

Αυτό είναι το σφάλμα που θα βρείτε αν χρησιμοποιήσετε έναν role που δεν υπάρχει. Αν ο role υπάρχει, η policy θα αποθηκευτεί χωρίς κανένα σφάλμα. (Το σφάλμα αφορά την ενημέρωση, αλλά λειτουργεί και κατά τη δημιουργία)

CLI

### You could also use: aws iam update-assume-role-policy
# When it works
aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json
{
"Role": {
"Path": "/",
"RoleName": "Test-Role",
"RoleId": "AROA5ZDCUJS3DVEIYOB73",
"Arn": "arn:aws:iam::947247140022:role/Test-Role",
"CreateDate": "2022-05-03T20:50:04Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::316584767888:role/account-balance"
},
"Action": [
"sts:AssumeRole"
]
}
]
}
}
}

# When it doesn't work
aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json
An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2"

Μπορείς να αυτοματοποιήσεις αυτή τη διαδικασία με 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 που χρησιμοποιείται στο παράδειγμα είναι ένας role στον λογαριασμό σου που το pacu θα υποδυθεί για να δημιουργήσει τις πολιτικές που χρειάζεται για την enumeration

Privesc

Σε περίπτωση που ο ρόλος ήταν λανθασμένα διαμορφωμένος και επιτρέπει σε οποιονδήποτε να τον αναλάβει:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

Ο επιτιθέμενος θα μπορούσε απλώς να το αναλάβει.

Ομοσπονδία OIDC τρίτου μέρους

Φανταστείτε ότι καταφέρνετε να διαβάσετε ένα Github Actions workflow που έχει πρόσβαση σε έναν role μέσα στο AWS.
Αυτή η εμπιστοσύνη μπορεί να δώσει πρόσβαση σε έναν role με την ακόλουθη trust policy:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<acc_id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}

Αυτή η πολιτική εμπιστοσύνης μπορεί να είναι σωστή, αλλά η έλλειψη περισσότερων συνθηκών θα πρέπει να σας κάνει να την αμφισβητήσετε.
Αυτό συμβαίνει επειδή ο προηγούμενος ρόλος μπορεί να αναληφθεί από οποιοσδήποτε από το Github Actions! Πρέπει επίσης να προσδιορίσετε στις συνθήκες και άλλα πράγματα όπως org name, repo name, env, brach…

Μια άλλη πιθανή λανθασμένη διαμόρφωση είναι να προσθέσετε μια συνθήκη όπως η ακόλουθη:

"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}

Σημειώστε ότι το wildcard (*) βρίσκεται πριν από την colon (:). Μπορείτε να δημιουργήσετε ένα org όπως org_name1 και να assume the role από ένα Github Action.

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks