AWS - STS Privesc

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

STS

sts:AssumeRole

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

Για παράδειγμα, η παρακάτω role trust policy δείχνει ότι ο καθένας μπορεί να την αναλάβει, επομένως οποιοσδήποτε χρήστης θα μπορεί να privesc στα δικαιώματα που σχετίζονται με αυτό το role.

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

Μπορείτε να προσποιηθείτε έναν ρόλο εκτελώντας:

aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

Πιθανός Αντίκτυπος: Privesc στον ρόλο.

Caution

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

sts:AssumeRoleWithSAML

Μια trust policy με αυτόν τον ρόλο δίνει σε χρήστες που έχουν πιστοποιηθεί μέσω SAML τη δυνατότητα να υποδυθούν τον ρόλο.

Ένα παράδειγμα trust policy με αυτήν την άδεια είναι:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

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

aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

Αλλά οι πάροχοι μπορεί να διαθέτουν τα δικά τους εργαλεία για να το κάνουν πιο εύκολο, όπως onelogin-aws-assume-role:

onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

Πιθανός Αντίκτυπος: Privesc στο role.

sts:AssumeRoleWithWebIdentity

Αυτό το δικαίωμα επιτρέπει την απόκτηση ενός συνόλου προσωρινών διαπιστευτηρίων ασφαλείας για χρήστες που έχουν ταυτοποιηθεί σε μια mobile εφαρμογή, εφαρμογή web, EKS… μέσω ενός παρόχου web identity. Μάθετε περισσότερα εδώ.

Για παράδειγμα, αν ένας EKS service account πρέπει να μπορεί να υποδυθεί ένα IAM role, θα έχει ένα token στο /var/run/secrets/eks.amazonaws.com/serviceaccount/token και μπορεί να αναλάβει το role και να αποκτήσει διαπιστευτήρια κάνοντας κάτι τέτοιο:

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

Το AWS IAM RolesAnywhere επιτρέπει σε workloads εκτός AWS να αναλαμβάνουν IAM roles χρησιμοποιώντας X.509 πιστοποιητικά. Ωστόσο, όταν οι trust policies δεν είναι σωστά περιορισμένες, μπορούν να καταχρηστούν για privilege escalation.

Για να κατανοηθεί αυτή η επίθεση, είναι απαραίτητο να εξηγήσουμε τι είναι ένα trust anchor. Ένα trust anchor στο AWS IAM RolesAnywhere είναι η οντότητα που αποτελεί τη ρίζα εμπιστοσύνης· περιέχει το δημόσιο πιστοποιητικό μιας Certificate Authority (CA) που έχει καταχωρηθεί στο account, ώστε το AWS να μπορεί να επαληθεύει τα παρουσιαζόμενα X.509 πιστοποιητικά. Έτσι, αν το client certificate έχει εκδοθεί από αυτή την CA και το trust anchor είναι ενεργό, το AWS το αναγνωρίζει ως έγκυρο.

Επιπλέον, ένα profile είναι η ρύθμιση που καθορίζει ποιες ιδιότητες του X.509 πιστοποιητικού (όπως CN, OU ή SAN) θα μετατραπούν σε session tags, τα οποία στη συνέχεια θα συγκριθούν με τους όρους της trust policy.

Αυτή η πολιτική στερείται περιορισμών σχετικά με το ποιο trust anchor ή ποιες ιδιότητες πιστοποιητικού επιτρέπονται. Ως αποτέλεσμα, οποιοδήποτε πιστοποιητικό συνδεδεμένο με οποιοδήποτε trust anchor στο account μπορεί να χρησιμοποιηθεί για να αναλάβει αυτό το role.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

Για privesc, απαιτείται το aws_signing_helper από https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

Στη συνέχεια, χρησιμοποιώντας ένα έγκυρο πιστοποιητικό, ο attacker μπορεί να pivot στο higher privilege role

aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin

Ο trust anchor επαληθεύει ότι το πιστοποιητικό readonly.pem του πελάτη προέρχεται από την εξουσιοδοτημένη CA, και μέσα σε αυτό το πιστοποιητικό readonly.pem βρίσκεται το δημόσιο κλειδί που χρησιμοποιεί η AWS για να επαληθεύσει ότι η υπογραφή έγινε με το αντίστοιχο ιδιωτικό κλειδί readonly.key.

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

Αναφορές

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