mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-11 20:45:21 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -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 <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.
|
||||
|
||||
Reference in New Issue
Block a user