AWS_UPDATE_TRUST_AND_ASSUME
Summary
Forestall ACL Alias
AWS_UPDATE_TRUST_AND_ASSUME
AD Alias
N/A
Affected Object Types
AWSUser|AWSRole → AWSRole
Exploitation Certainty
High
AWS IAM Action
iam:UpdateAssumeRolePolicy + sts:AssumeRole
Description
An attacker who holds both iam:UpdateAssumeRolePolicy and sts:AssumeRole on a target role takes it over unconditionally. They rewrite the trust policy to trust their own principal, then assume the role immediately.
This is a consolidated privesc edge — it needs both actions on the same role. iam:UpdateAssumeRolePolicy alone changes who may assume the role; sts:AssumeRole alone is blocked when no trust exists. Together they form a two-step takeover that needs no prior trust relationship.
The standalone iam:UpdateAssumeRolePolicy case is modeled separately as AWS_UPDATE_TRUST (same-account takeover, no separate assume grant needed). This edge covers the cross-account case and the case where the assume permission is explicit.
Edge semantics: (Attacker:AWSUser|AWSRole) -[AWS_UPDATE_TRUST_AND_ASSUME]-> (TargetRole:AWSRole)
Precondition: none. The attacker sets the trust and assumes the role in sequence.
Identification
Check whether a principal holds both actions on the target role:
aws iam simulate-principal-policy \
--policy-source-arn <attacker-arn> \
--action-names iam:UpdateAssumeRolePolicy sts:AssumeRole \
--resource-arns "arn:aws:iam::<account-id>:role/<target-role>"
# View the current trust policy of a role
aws iam get-role --role-name <target-role> \
--query "Role.AssumeRolePolicyDocument"PowerShell (AWS Tools):
Exploitation
Mitigation
Restrict
iam:UpdateAssumeRolePolicyto dedicated IAM administrator roles. Deny it for service and application roles.Use SCPs to block trust policy changes that introduce arbitrary external principals or wildcards.
Apply resource-based conditions on sensitive roles — for example, require
aws:PrincipalOrgID.Enforce IAM permission boundaries so a rewritten trust policy cannot grant more than the boundary allows.
Use AWS IAM Access Analyzer to flag roles whose trust policies were recently modified.
Detection
UpdateAssumeRolePolicy
The trust policy of a role was modified
requestParameters.roleName, requestParameters.policyDocument, userIdentity.arn
AssumeRole
The role was assumed after trust modification
requestParameters.roleArn, userIdentity.arn
Alert when UpdateAssumeRolePolicy adds a new principal and AssumeRole on the same role follows within a short window. Also alert on any trust policy change that introduces a wildcard principal ("Principal": "*").
References
Last updated
Was this helpful?