AWS - IAM & STS Unauthenticated Enum

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

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

Απαρίθμηση Ρόλων και Ονομάτων Χρηστών σε ένα λογαριασμό

Βίαιη Δοκιμή Ρόλου

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

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 μπορεί να επιστρέψει:

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

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

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

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

Μπορείτε να χρησιμοποιήσετε αυτό το σενάριο για να απαριθμήσετε δυνητικούς πρωταρχικούς καταχρώντας αυτό το πρόβλημα.

Πολιτικές εμπιστοσύνης: Βίαιη αναζήτηση διασυνοριακών ρόλων και χρηστών

Η διαμόρφωση ή ενημέρωση της πολιτικής εμπιστοσύνης ενός ρόλου IAM περιλαμβάνει τον καθορισμό των AWS πόρων ή υπηρεσιών που επιτρέπεται να υιοθετήσουν αυτόν τον ρόλο και να λάβουν προσωρινές πιστοποιήσεις. Εάν ο καθορισμένος πόρος στην πολιτική υπάρχει, η πολιτική εμπιστοσύνης αποθηκεύεται επιτυχώς. Ωστόσο, εάν ο πόρος δεν υπάρχει, δημιουργείται ένα σφάλμα, που υποδεικνύει ότι δόθηκε ένας μη έγκυρος πρωταρχικός.

Σημειώστε ότι σε αυτόν τον πόρο μπορείτε να καθορίσετε έναν διασυνοριακό ρόλο ή χρήστη:

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

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

Αυτό είναι ένα παράδειγμα πολιτικής:

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

Γραφική διεπαφή (GUI)

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

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

Ανέβασμα δικαιωμάτων

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

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

Ο επιτιθέμενος μπορεί απλά να υποθέσει αυτό.

Τρίτος Φορέας OIDC Federation

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

{
"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! Θα πρέπει να καθορίσετε στις συνθήκες και άλλα πράγματα, όπως το όνομα του οργανισμού, το όνομα του αποθετηρίου, το περιβάλλον, το όνομα του κλαδιού...

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

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

Σημείωση ότι υπάρχει ένας μπαλαντέρ (*) πριν από τη άνω κάθετο (:). Μπορείτε να δημιουργήσετε μια οργάνωση όπως org_name1 και να υποθέσετε τον ρόλο από μια ενέργεια του Github.

Αναφορές

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

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

Last updated