IAM Unauthenticated Enumeration
AWS error messages differ between non-existent principals and valid ones that simply lack permissions. This allows confirming whether a username or role exists without any credentials.
Error-Based User Enumeration
quiet-riot brute-forces IAM principal names using cross-account role assumption errors:
Explain command
| -e users | Enumerate IAM users. |
| -a $ACCOUNT_ID | Target AWS account ID. |
| -w | Wordlist of names to try. |
The tool attempts sts:AssumeRole against arn:aws:iam::$ACCOUNT_ID:role/$WORD. A MalformedPolicyDocumentException means the principal exists. An InvalidInputException means it does not.
Warning
This generates CloudTrail AssumeRole events in the target account for every tested principal name. Use a wordlist matched to the target's naming conventions to reduce noise.
Manual STS Error Discrimination
Test a single principal name manually:
Enumerating Roles via Trust Policy Errors
With any valid AWS credentials, enumerate role names more reliably:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::999999999999:user/attacker is not authorized to assume role: arn:aws:iam::123456789012:role/AdminRole
AccessDenied: User ... is not authorized to assume role confirms the role exists.An error occurred (NoSuchEntity) confirms it does not.
Wordlists for IAM Enumeration
Common IAM role name patterns to try:
admin
Administrator
AdminRole
OrganizationAccountAccessRole
ReadOnlyAccess
PowerUserAccess
ec2-role
lambda-role
ecs-task-role
github-actions
deploy
ci-cd
terraform
s3-access
rds-access
cross-account
audit
security
devops
See IAM Authenticated Enumeration for full enumeration once you have credentials.
Was this helpful?
Your feedback helps improve this page.