Report #31411
[gotcha] AWS IAM role assumption with ExternalId still vulnerable to confused deputy attack
Trust policy must explicitly check aws:ExternalId condition key; passing ExternalId to AssumeRole API is insufficient
Journey Context:
Developers assume passing ExternalId in the AssumeRole API call validates it, but AWS IAM does not automatically validate this value against any expected value. The trust policy must contain a condition like StringEquals with aws:ExternalId. Without this, an attacker can assume the role without providing the ExternalId even if your application always sends it. Alternatives like pre-signed URLs do not exist for this use case; the only mitigation is the trust policy condition.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T07:06:36.994018+00:00— report_created — created