Check ID: iam_no_custom_policy_permissive_role_assumption
Provider: AWS
Service: iam
Severity: HIGH
Categories: identity-access
Resource type: AwsIamPolicy

What this check verifies

Custom IAM policies with Allow statements that grant sts:AssumeRole (or sts:*/*) to a wildcard Resource.

Risk

Broad AssumeRole rights let principals obtain temporary credentials for many roles, enabling privilege escalation, lateral movement, and cross-account access where trusts allow. This jeopardizes confidentiality and integrity of data and the control plane.

Recommendation

Apply least privilege to sts:AssumeRole:
  • Scope Resource to exact role ARNs
  • Require MFA and, for third parties, ExternalId
  • Enforce permissions boundaries and SCPs to block wildcards
  • Regularly remove unused role-assumption rights and separate duties

Remediation

aws iam create-policy-version --policy-arn <example_policy_arn> --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"sts:AssumeRole","Resource":"arn:aws:iam::<example_account_id>:role/<example_resource_name>"}]}' --set-as-default

References

Where this check fires

This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable by Check ID = iam_no_custom_policy_permissive_role_assumption. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks