aws-kms-can-write-alias

explicit aws emits CanWrite

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 typeIdentity
target type*
source<principal>
target<alias node (AWS::KMS::Alias; CanWrite target set is '*')>
permissionskms: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."
move · open · esc close