mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -4,19 +4,19 @@
|
||||
|
||||
## Secrets Manager
|
||||
|
||||
Pour plus d'informations, consultez :
|
||||
For more information check:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Lire Secrets
|
||||
### Lire les secrets
|
||||
|
||||
Les **secrets eux-mêmes sont des informations sensibles**, [consultez la page privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) pour apprendre comment les lire.
|
||||
|
||||
### DoS — Changer la valeur du Secret
|
||||
### 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.**
|
||||
Modifier la valeur du secret peut **provoquer un DoS sur 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.
|
||||
@@ -28,19 +28,19 @@ aws secretsmanager put-secret-value \
|
||||
```
|
||||
### DoS Change KMS key
|
||||
|
||||
Si l'attaquant dispose de l'autorisation secretsmanager:UpdateSecret, il peut configurer le secret pour qu'il utilise 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 rend possible la mise à jour du secret avec la nouvelle clé. Si la clé n'était pas accessible, le secret n'aurait pas pu être mis à jour.
|
||||
Si l'attaquant possède la permission secretsmanager:UpdateSecret, il peut configurer le secret pour utiliser une clé KMS appartenant à l'attaquant. Cette clé est initialement configurée de manière à ce que n'importe qui puisse y accéder et l'utiliser, permettant ainsi de mettre à jour le secret avec la nouvelle clé. Si la clé n'était pas accessible, le secret n'aurait pas pu être mis à jour.
|
||||
|
||||
Après avoir changé la KMS key du secret, l'attaquant modifie la configuration de sa clé pour que lui seul puisse y accéder. Ainsi, dans les versions ultérieures du secret, celui-ci sera chiffré avec la nouvelle clé et, comme personne n'y aura accès, la possibilité de récupérer le secret sera perdue.
|
||||
Après avoir changé la clé du secret, l'attaquant modifie la configuration de sa clé de sorte que seul lui puisse y accéder. De cette façon, dans les versions suivantes du secret, il sera chiffré avec la nouvelle clé et, comme il n'y aura pas d'accès à celle-ci, la capacité de récupérer le secret serait perdue.
|
||||
|
||||
Il est important de noter que cette inaccessibilité ne se produira que sur les versions suivantes, après que le contenu du secret ait changé, car la version actuelle est toujours chiffrée avec la KMS key d'origine.
|
||||
Il est important de noter que cette inaccessibilité ne se produira que sur les versions ultérieures, après que le contenu du secret ait changé, puisque la version actuelle est toujours chiffrée avec la clé KMS 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 Suppression d'un secret
|
||||
### DoS Deleting Secret
|
||||
|
||||
Le nombre minimum de jours pour supprimer un secret est de 7
|
||||
Le nombre minimum de jours pour supprimer un secret est de 7.
|
||||
```bash
|
||||
aws secretsmanager delete-secret \
|
||||
--secret-id MyTestSecret \
|
||||
@@ -48,29 +48,29 @@ aws secretsmanager delete-secret \
|
||||
```
|
||||
## secretsmanager:RestoreSecret
|
||||
|
||||
Il est possible de restaurer un secret, ce qui permet de récupérer des secrets programmés pour suppression, puisque la période minimale de suppression des secrets est de 7 jours et la maximale de 30 jours. Avec la permission secretsmanager:GetSecretValue, cela permet d'en extraire le contenu.
|
||||
Il est possible de restaurer un secret, ce qui permet la récupération de secrets programmés pour suppression, puisque la période minimale de suppression des secrets est de 7 jours et la maximale 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 :
|
||||
Pour récupérer un secret qui est 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 politique de la ressource qui contrôle qui peut accéder à un secret. Cela pourrait conduire à un DoS si la politique de la ressource était configurée pour autoriser l'accès à un ensemble spécifique d'utilisateurs.
|
||||
Cette action permet de supprimer la politique de ressource qui contrôle qui peut accéder à un secret. Cela pourrait entraîner un DoS si la politique de ressource était configurée pour autoriser l'accès à un ensemble spécifique d'utilisateurs.
|
||||
|
||||
Pour supprimer la politique de la ressource:
|
||||
Pour supprimer la politique de ressource:
|
||||
```bash
|
||||
aws secretsmanager delete-resource-policy \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:UpdateSecretVersionStage
|
||||
|
||||
Les états d'un secret servent à gérer les versions d'un secret. 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 états d'un secret sont utilisés pour gérer les versions d'un secret. AWSCURRENT marque la version active que les applications utilisent, AWSPREVIOUS conserve la version précédente afin que vous puissiez 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 d'en faire la version actuelle.
|
||||
|
||||
Les applications lisent toujours la version portant le label AWSCURRENT. Si quelqu'un déplace cette étiquette vers la mauvaise version, les applications utiliseront des identifiants invalides et risquent d'échouer.
|
||||
Les applications lisent toujours la version marquée AWSCURRENT. Si quelqu'un déplace cette étiquette vers la mauvaise version, les applications utiliseront des identifiants invalides et risquent d'échouer.
|
||||
|
||||
AWSPREVIOUS n'est pas utilisé automatiquement. Cependant, si AWSCURRENT est supprimé ou réattribué de manière incorrecte, il peut sembler que tout fonctionne encore avec la version précédente.
|
||||
AWSPREVIOUS n'est pas utilisé automatiquement. Cependant, 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> \
|
||||
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
|
||||
--remove-from-version-id <previous-version-id>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Exfiltration massive de secrets via BatchGetSecretValue (jusqu'à 20 par appel)
|
||||
|
||||
Abusez de l'API Secrets Manager BatchGetSecretValue pour récupérer jusqu'à 20 secrets dans une seule requête. Cela peut réduire drastiquement le volume d'appels API par rapport à l'itération GetSecretValue par secret. Si des filtres sont utilisés (tags/name), la permission ListSecrets est également requise. CloudTrail enregistre toujours un événement GetSecretValue par secret récupéré dans le batch.
|
||||
|
||||
Permissions requises
|
||||
- secretsmanager:BatchGetSecretValue
|
||||
- secretsmanager:GetSecretValue for each target secret
|
||||
- secretsmanager:ListSecrets if using --filters
|
||||
- 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 aussi besoin de `secretsmanager:GetSecretValue` pour chaque secret que vous souhaitez récupérer.
|
||||
|
||||
Exfiltrer par liste explicite
|
||||
```bash
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--secret-id-list <secret1> <secret2> <secret3> \
|
||||
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
|
||||
```
|
||||
Exfiltrer par filtres (clé/valeur de tag 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
|
||||
- Accès rapide de type “smash-and-grab” à de nombreux secrets avec moins d'appels API, contournant potentiellement des alertes calibrées sur des pics de GetSecretValue.
|
||||
- Les logs CloudTrail incluent toujours un événement GetSecretValue par secret récupéré par le lot.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Secrets Manager
|
||||
|
||||
Pour plus d'informations sur Secrets Manager, voir :
|
||||
Pour plus d'informations sur Secrets Manager, consultez :
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
@@ -12,18 +12,18 @@ Pour plus d'informations sur Secrets Manager, voir :
|
||||
|
||||
### `secretsmanager:GetSecretValue`
|
||||
|
||||
Un attaquant disposant de cette autorisation peut obtenir la **valeur enregistrée à l'intérieur d'un secret** dans AWS **Secretsmanager**.
|
||||
Un attaquant disposant de cette permission peut récupérer la **valeur enregistrée d'un secret** dans AWS **Secretsmanager**.
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
|
||||
```
|
||||
**Impact potentiel :** Accès à des données hautement sensibles dans AWS Secrets Manager.
|
||||
**Impact potentiel :** Accéder à des données hautement sensibles dans le service AWS Secrets Manager.
|
||||
|
||||
> [!WARNING]
|
||||
> Notez que même avec la permission `secretsmanager:BatchGetSecretValue`, un attaquant aurait également besoin de `secretsmanager:GetSecretValue` pour récupérer les secrets sensibles.
|
||||
|
||||
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
|
||||
|
||||
Avec les permissions précédentes, il est possible de **donner l'accès à d'autres principals/comptes (même externes)** pour accéder au **secret**. Notez que pour **lire des secrets chiffrés** avec une clé KMS, l'utilisateur doit également avoir **l'accès à la clé KMS** (plus d'infos dans la [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
Avec les permissions précédentes, il est possible de **donner l'accès à d'autres principals/accounts (même externes)** pour accéder au **secret**. Notez que pour **lire des secrets chiffrés** avec une clé KMS, l'utilisateur doit également avoir **l'accès à la clé KMS** (plus d'infos dans la [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
```bash
|
||||
aws secretsmanager list-secrets
|
||||
aws secretsmanager get-resource-policy --secret-id <secret_name>
|
||||
|
||||
Reference in New Issue
Block a user