aws-kms-can-write-alias
match (effective permission)
{
"action": "kms:UpdateAlias",
"resource_type": "AWS::KMS::Alias"
}
where
the principal also holds kms:UpdateAlias on (or covering) the TARGET key it re-points to
emit
| source type | Identity |
|---|---|
| target type | * |
| source | <principal> |
| target | <alias node (AWS::KMS::Alias; CanWrite target set is '*')> |
| permissions | kms:UpdateAlias |
Narrative
{principal.name} can re-point alias {alias.name} to another key (kms:UpdateAlias) - a substitution/poisoning risk for callers referencing the key by alias.
Raw rule rules/explicit/aws-kms.yaml
id: aws-kms-can-write-alias
emits: CanWrite
applies_to:
- aws
match_effective_permission:
action: kms:UpdateAlias
resource_type: AWS::KMS::Alias
where:
- the principal also holds kms:UpdateAlias on (or covering) the TARGET key it re-points to
emit:
source_type: Identity
target_type: '*'
source: <principal>
target: <alias node (AWS::KMS::Alias; CanWrite target set is '*')>
api_source: policy evaluation (kms:UpdateAlias)
permissions:
- kms:UpdateAlias
false_positive_note: "This is a substitution/poisoning primitive, not escalation: re-pointing an alias\
\ to an attacker-controlled key affects only callers that reference the key BY ALIAS (not by key ID/ARN),\
\ and encrypt/decrypt with the substituted key still requires those callers' own key permissions on\
\ it. Model as CanWrite on the alias (per providers/aws/kms.md \xA76), NOT a crypto/execution edge;\
\ do not roll it up to CanDecrypt/CanSignAs."
narrative: "{principal.name} can re-point alias {alias.name} to another key (kms:UpdateAlias) \u2014\
\ a substitution/poisoning risk for callers referencing the key by alias."