diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 337645961..87ea9eb8e 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -10,37 +10,37 @@ Para más información consulta: ../aws-services/aws-secrets-manager-enum.md {{#endref}} -### Leer secretos +### Leer Secrets -Los **secretos en sí son información sensible**, [revisa la página de privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para aprender cómo leerlos. +Los **secrets** son información sensible; [consulta la página de privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para aprender cómo leerlos. -### DoS Cambiar el valor del secreto +### DoS - Cambiar el valor del secret -Cambiar el valor del secreto podría **hacer DoS a todos los sistemas que dependen de ese valor.** +Al cambiar el valor del secret podrías **DoS a todos los sistemas que dependen de ese valor.** > [!WARNING] -> Ten en cuenta que los valores previos también se almacenan, por lo que es fácil volver al valor anterior. +> Ten en cuenta que los valores anteriores también se almacenan, por lo que es fácil volver al valor anterior. ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ --secret-id MyTestSecret \ --secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" ``` -### DoS Cambiar KMS key +### DoS Change KMS key -Si el atacante tiene el permiso secretsmanager:UpdateSecret, puede configurar el secreto para que use una KMS key propiedad del atacante. Esa key se configura inicialmente de modo que cualquiera pueda accederla y usarla, por lo que es posible actualizar el secreto con la nueva key. Si la key no fuera accesible, no sería posible actualizar el secreto. +Si el atacante tiene el permiso secretsmanager:UpdateSecret, puede configurar el secreto para que use una KMS key propiedad del atacante. Esa clave se configura inicialmente de modo que cualquiera pueda acceder y usarla, por lo que es posible actualizar el secreto con la nueva clave. Si la clave no fuera accesible, no se podría actualizar el secreto. -Tras cambiar la key del secreto, el atacante modifica la configuración de su key para que solo él pueda acceder a ella. De este modo, en las versiones posteriores del secreto se cifrará con la nueva key y, al no existir acceso a ella, se perderá la capacidad de recuperar el secreto. +Después de cambiar la clave del secreto, el atacante modifica la configuración de su clave para que solo él pueda acceder a ella. De esta manera, en las versiones subsecuentes del secreto, estará cifrado con la nueva clave y, al no haber acceso a ésta, se perdería la posibilidad de recuperar el secreto. -Es importante señalar que esta inaccesibilidad solo ocurrirá en versiones posteriores, después de que cambie el contenido del secreto, ya que la versión actual sigue estando cifrada con la KMS key original. +Es importante señalar que esta inaccesibilidad solo ocurrirá en versiones posteriores, tras el cambio del contenido del secreto, ya que la versión actual sigue estando cifrada con la KMS key original. ```bash aws secretsmanager update-secret \ --secret-id MyTestSecret \ --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE ``` -### DoS Eliminación de secreto +### DoS Deleting Secret -El número mínimo de días para eliminar un secreto es 7 +El número mínimo de días para eliminar un secret es 7 ```bash aws secretsmanager delete-secret \ --secret-id MyTestSecret \ @@ -48,7 +48,7 @@ aws secretsmanager delete-secret \ ``` ## secretsmanager:RestoreSecret -Es posible restaurar un secreto, lo que permite la recuperación de secretos que han sido programados para su eliminación, ya que el período mínimo de eliminación para los secretos es de 7 días y el máximo es de 30 días. Junto con el permiso secretsmanager:GetSecretValue, esto permite obtener su contenido. +Es posible restaurar un secreto, lo que permite la recuperación de secretos que han sido programados para eliminación, ya que el periodo mínimo de eliminación para secretos es de 7 días y el máximo es de 30 días. Junto con el permiso secretsmanager:GetSecretValue, esto permite recuperar sus contenidos. Para recuperar un secreto que está en proceso de eliminación, puedes usar el siguiente comando: ```bash @@ -57,20 +57,20 @@ aws secretsmanager restore-secret \ ``` ## secretsmanager:DeleteResourcePolicy -Esta acción permite eliminar la resource policy que controla quién puede acceder a un secret. Esto podría provocar un DoS si la resource policy estaba configurada para permitir el acceso a un conjunto específico de usuarios. +Esta acción permite eliminar la política de recursos que controla quién puede acceder a un secreto. Esto podría provocar un DoS si la política de recursos estaba configurada para permitir el acceso a un conjunto específico de usuarios. -Para eliminar la resource policy: +Para eliminar la política de recursos: ```bash aws secretsmanager delete-resource-policy \ --secret-id ``` ## secretsmanager:UpdateSecretVersionStage -Los estados de un secreto se usan para gestionar las versiones de un secreto. AWSCURRENT marca la versión activa que usan las aplicaciones, AWSPREVIOUS conserva la versión anterior para que puedas revertir si es necesario, y AWSPENDING se usa en el proceso de rotación para preparar y validar una nueva versión antes de convertirla en la actual. +Los estados de un secreto se usan para gestionar las versiones de un secreto. AWSCURRENT marca la versión activa que usan las aplicaciones, AWSPREVIOUS conserva la versión anterior para que puedas volver atrás si es necesario, y AWSPENDING se usa en el proceso de rotación para preparar y validar una nueva versión antes de convertirla en la actual. Las aplicaciones siempre leen la versión con AWSCURRENT. Si alguien mueve esa etiqueta a la versión equivocada, las aplicaciones usarán credenciales inválidas y pueden fallar. -AWSPREVIOUS no se usa automáticamente. Sin embargo, si AWSCURRENT se elimina o reasigna incorrectamente, puede parecer que todo sigue ejecutándose con la versión anterior. +AWSPREVIOUS no se usa automáticamente. Sin embargo, si AWSCURRENT se elimina o reasigna incorrectamente, puede parecer que todo sigue funcionando con la versión anterior. ```bash aws secretsmanager update-secret-version-stage \ --secret-id \ @@ -79,3 +79,48 @@ aws secretsmanager update-secret-version-stage \ --remove-from-version-id ``` {{#include ../../../banners/hacktricks-training.md}} + +### Exfiltración masiva de secretos mediante BatchGetSecretValue (hasta 20 por llamada) + +Abusa de la API Secrets Manager BatchGetSecretValue para recuperar hasta 20 secretos en una sola solicitud. Esto puede reducir drásticamente el volumen de llamadas API en comparación con iterar GetSecretValue por cada secreto. Si se usan filtros (tags/name), también se requiere el permiso ListSecrets. CloudTrail aún registra un evento GetSecretValue por cada secreto recuperado en el lote. + +Permisos requeridos +- secretsmanager:BatchGetSecretValue +- secretsmanager:GetSecretValue para cada secret objetivo +- secretsmanager:ListSecrets si se usan --filters +- kms:Decrypt en las CMKs usadas por los secretos (si no se usa aws/secretsmanager) + +> [!WARNING] +> Ten en cuenta que el permiso `secretsmanager:BatchGetSecretValue` no es suficiente por sí solo para recuperar secretos; también necesitas `secretsmanager:GetSecretValue` para cada secreto que quieras recuperar. + +Exfiltrar mediante lista explícita +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +Exfiltrate por filtros (tag key/value o name prefix) +```bash +# By tag key +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-key,Values=env \ +--max-results 20 \ +--query 'SecretValues[].{Name:Name,Val:SecretString}' + +# By tag value +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-value,Values=prod \ +--max-results 20 + +# By name prefix +aws secretsmanager batch-get-secret-value \ +--filters Key=name,Values=MyApp +``` +Manejo de fallos parciales +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +Impacto +- Extracción rápida “smash-and-grab” de muchos secretos con menos llamadas a la API, potencialmente eludiendo alertas ajustadas a picos de GetSecretValue. +- Los registros de CloudTrail todavía incluyen un evento GetSecretValue por cada secreto recuperado por el lote. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index 94e7bee4b..bc9e51514 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -Para más información sobre Secrets Manager consulta: +Para más información sobre secrets manager consulta: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,18 +12,18 @@ Para más información sobre Secrets Manager consulta: ### `secretsmanager:GetSecretValue` -Un atacante con este permiso puede obtener el **valor guardado dentro de un secreto** en AWS **Secretsmanager**. +Un atacante con este permiso puede obtener el **valor guardado dentro de un secret** en AWS **Secretsmanager**. ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**Potential Impact:** Acceder a datos altamente sensibles dentro del servicio AWS Secrets Manager. +**Potential Impact:** Acceso a datos altamente sensibles en AWS Secrets Manager. > [!WARNING] > Tenga en cuenta que incluso con el permiso `secretsmanager:BatchGetSecretValue`, un atacante también necesitaría `secretsmanager:GetSecretValue` para recuperar los secretos sensibles. ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -Con los permisos anteriores es posible **dar acceso a otros principals/accounts (incluso externos)** para acceder al **secret**. Tenga en cuenta que para **leer secretos cifrados** con una clave KMS, el usuario también necesita tener **acceso a la clave KMS** (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)). +Con los permisos anteriores es posible **dar acceso a otros principals/accounts (incluso externos)** para acceder al **secret**. Tenga en cuenta que para **leer secrets cifrados** con una KMS key, el usuario también necesita tener **acceso sobre la KMS key** (más información en la [KMS Enum page](../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id @@ -45,4 +45,4 @@ policy.json: ] } ``` -No puedo acceder a archivos en tu sistema. Por favor pega aquí el contenido de src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md que quieres que traduzca, y lo traduciré al español manteniendo exactamente la misma sintaxis Markdown/HTML. +{{#include ../../../banners/hacktricks-training.md}}