mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-28 05:33:10 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -10,16 +10,16 @@ Für weitere Informationen siehe:
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Secrets lesen
|
||||
### Secrets auslesen
|
||||
|
||||
Die **Secrets selbst sind sensible Informationen**, [siehe die privesc-Seite](../aws-privilege-escalation/aws-secrets-manager-privesc.md), um zu lernen, wie man sie liest.
|
||||
Die **Secrets selbst sind sensible Informationen**, [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md) um zu lernen, wie man sie ausliest.
|
||||
|
||||
### DoS: Secret-Wert ändern
|
||||
### DoS Change Secret Value
|
||||
|
||||
Durch das Ändern des Secret-Werts könntest du **ein DoS für alle Systeme verursachen, die von diesem Wert abhängen.**
|
||||
Wenn du den Wert eines Secrets änderst, könntest du **ein DoS für alle Systeme verursachen, die von diesem Wert abhängen.**
|
||||
|
||||
> [!WARNING]
|
||||
> Beachte, dass frühere Werte ebenfalls gespeichert werden, sodass man einfach zum vorherigen Wert zurückkehren kann.
|
||||
> Beachte, dass frühere Werte ebenfalls gespeichert werden, sodass es einfach ist, zum vorherigen Wert zurückzukehren.
|
||||
```bash
|
||||
# Requires permission secretsmanager:PutSecretValue
|
||||
aws secretsmanager put-secret-value \
|
||||
@@ -28,11 +28,11 @@ aws secretsmanager put-secret-value \
|
||||
```
|
||||
### DoS Change KMS key
|
||||
|
||||
Wenn der Angreifer die Berechtigung secretsmanager:UpdateSecret besitzt, kann er das secret so konfigurieren, dass es einen vom Angreifer kontrollierten KMS key verwendet. Dieser KMS key wird anfänglich so eingerichtet, dass jeder darauf zugreifen und ihn verwenden kann, sodass das Aktualisieren des secret mit dem neuen KMS key möglich ist. Wäre der KMS key nicht zugänglich gewesen, hätte das secret nicht aktualisiert werden können.
|
||||
Wenn der Angreifer die Berechtigung secretsmanager:UpdateSecret besitzt, kann er das Secret so konfigurieren, dass es einen von ihm kontrollierten KMS-Key verwendet. Dieser Key wird zunächst so eingerichtet, dass jeder darauf zugreifen und ihn verwenden kann, sodass das Aktualisieren des Secrets mit dem neuen Key möglich ist. Wäre der Key nicht zugänglich gewesen, hätte das Secret nicht aktualisiert werden können.
|
||||
|
||||
Nachdem der Angreifer den KMS key für das secret geändert hat, passt er die Konfiguration seines KMS keys so an, dass nur noch er darauf zugreifen kann. Auf diese Weise werden spätere Versionen des secret mit dem neuen KMS key verschlüsselt, und da kein Zugriff auf den Key besteht, geht die Möglichkeit verloren, das secret abzurufen.
|
||||
Nachdem der Key für das Secret geändert wurde, ändert der Angreifer die Konfiguration seines Keys so, dass nur noch er darauf zugreifen kann. Dadurch werden nachfolgende Versionen des Secrets mit dem neuen Key verschlüsselt, und da kein Zugriff auf diesen Key besteht, geht die Möglichkeit verloren, das Secret abzurufen.
|
||||
|
||||
Wichtig zu beachten ist, dass diese Unzugänglichkeit erst bei späteren Versionen auftritt, nachdem sich der Inhalt des secret geändert hat, da die aktuelle Version noch mit dem ursprünglichen KMS key verschlüsselt ist.
|
||||
Es ist wichtig zu beachten, dass diese Unzugänglichkeit nur in späteren Versionen auftreten wird, nachdem der Inhalt des Secrets geändert wurde, da die aktuelle Version weiterhin mit dem ursprünglichen KMS-Key verschlüsselt ist.
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--secret-id MyTestSecret \
|
||||
@@ -40,7 +40,7 @@ aws secretsmanager update-secret \
|
||||
```
|
||||
### DoS Deleting Secret
|
||||
|
||||
Die minimale Anzahl an Tagen, um ein secret zu löschen, beträgt 7
|
||||
Die minimale Anzahl von Tagen, um ein secret zu löschen, beträgt 7
|
||||
```bash
|
||||
aws secretsmanager delete-secret \
|
||||
--secret-id MyTestSecret \
|
||||
@@ -48,29 +48,29 @@ aws secretsmanager delete-secret \
|
||||
```
|
||||
## secretsmanager:RestoreSecret
|
||||
|
||||
Es ist möglich, ein Secret wiederherzustellen, wodurch Secrets, die zur Löschung vorgesehen wurden, wiederhergestellt werden können, da die minimale Löschfrist für Secrets 7 Tage und die maximale 30 Tage beträgt. In Kombination mit der Berechtigung secretsmanager:GetSecretValue ermöglicht dies, deren Inhalte abzurufen.
|
||||
Es ist möglich, ein secret wiederherzustellen. Dadurch können secrets wiederhergestellt werden, die zur Löschung geplant sind, da die minimale Löschfrist für secrets 7 Tage und die maximale 30 Tage beträgt. Zusammen mit der Berechtigung secretsmanager:GetSecretValue lässt sich so deren Inhalt abrufen.
|
||||
|
||||
Um ein Secret wiederherzustellen, das sich im Löschvorgang befindet, können Sie den folgenden Befehl verwenden:
|
||||
Um ein secret wiederherzustellen, das sich im Löschvorgang befindet, können Sie den folgenden Befehl verwenden:
|
||||
```bash
|
||||
aws secretsmanager restore-secret \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:DeleteResourcePolicy
|
||||
|
||||
Diese Aktion erlaubt das Löschen der Resource Policy, die steuert, wer auf ein Secret zugreifen kann. Dies könnte zu einem DoS führen, wenn die Resource Policy so konfiguriert war, dass sie einem bestimmten Benutzerkreis Zugriff erlaubt.
|
||||
Diese Aktion erlaubt das Löschen der Ressourcenrichtlinie, die steuert, wer auf ein Secret zugreifen kann. Dies könnte zu einem DoS führen, wenn die Ressourcenrichtlinie so konfiguriert war, dass nur einer bestimmten Benutzergruppe Zugriff gewährt wurde.
|
||||
|
||||
Um die Resource Policy zu löschen:
|
||||
Um die Ressourcenrichtlinie zu löschen:
|
||||
```bash
|
||||
aws secretsmanager delete-resource-policy \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:UpdateSecretVersionStage
|
||||
|
||||
Die States eines Secrets werden verwendet, um Versionen eines Secrets zu verwalten. AWSCURRENT kennzeichnet die aktive Version, die Anwendungen verwenden; AWSPREVIOUS behält die vorherige Version, damit Sie bei Bedarf zurückrollen können; und AWSPENDING wird im Rotationsprozess genutzt, um eine neue Version vorzubereiten und zu validieren, bevor sie zur aktuellen gemacht wird.
|
||||
Die Zustände von Secrets werden verwendet, um deren Versionen zu verwalten. AWSCURRENT markiert die aktive Version, die Anwendungen verwenden; AWSPREVIOUS behält die vorherige Version, damit man bei Bedarf zurückrollen kann; und AWSPENDING wird im Rotation-Prozess genutzt, um eine neue Version vorzubereiten und zu validieren, bevor sie zur aktuellen Version wird.
|
||||
|
||||
Anwendungen lesen immer die Version mit AWSCURRENT. Wenn jemand dieses Label auf die falsche Version verschiebt, verwenden die Apps ungültige Anmeldeinformationen und können fehlschlagen.
|
||||
Anwendungen lesen immer die Version mit AWSCURRENT. Wenn jemand dieses Label auf die falsche Version verschiebt, verwenden die Anwendungen ungültige Anmeldeinformationen und können ausfallen.
|
||||
|
||||
AWSPREVIOUS wird nicht automatisch verwendet. Wenn jedoch AWSCURRENT entfernt oder falsch neu zugewiesen wird, kann es so aussehen, als würde weiterhin alles mit der vorherigen Version laufen.
|
||||
AWSPREVIOUS wird nicht automatisch verwendet. Wenn AWSCURRENT jedoch entfernt oder falsch neu zugewiesen wird, kann es so aussehen, als würde weiterhin mit der vorherigen Version gearbeitet.
|
||||
```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}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Mass Secret Exfiltration via BatchGetSecretValue (bis zu 20 pro Aufruf)
|
||||
|
||||
Abuse the Secrets Manager BatchGetSecretValue API to retrieve up to 20 secrets in a single request. This can dramatically reduce API-call volume compared to iterating GetSecretValue per secret. If filters are used (tags/name), ListSecrets permission is also required. CloudTrail still records one GetSecretValue event per secret retrieved in the batch.
|
||||
|
||||
Erforderliche Berechtigungen
|
||||
- secretsmanager:BatchGetSecretValue
|
||||
- secretsmanager:GetSecretValue für jedes Ziel-Secret
|
||||
- secretsmanager:ListSecrets wenn --filters verwendet wird
|
||||
- kms:Decrypt auf den CMKs, die für die Secrets verwendet werden (wenn nicht aws/secretsmanager)
|
||||
|
||||
> [!WARNING]
|
||||
> Beachte, dass die Berechtigung `secretsmanager:BatchGetSecretValue` allein nicht ausreicht, um Secrets abzurufen — du benötigst zudem `secretsmanager:GetSecretValue` für jedes Secret, das du abrufen möchtest.
|
||||
|
||||
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}'
|
||||
```
|
||||
Exfiltrate durch Filter (tag key/value oder 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
|
||||
```
|
||||
Umgang mit teilweisen Ausfällen
|
||||
```bash
|
||||
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
|
||||
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
|
||||
```
|
||||
Auswirkungen
|
||||
- Schnelles “smash-and-grab” vieler Secrets mit weniger API-Aufrufen, das möglicherweise Alarmierungen umgeht, die auf Spitzen von GetSecretValue ausgelegt sind.
|
||||
- CloudTrail-Protokolle enthalten weiterhin ein GetSecretValue-Ereignis pro im Batch abgerufenes Secret.
|
||||
|
||||
@@ -12,18 +12,18 @@ Für weitere Informationen über Secrets Manager siehe:
|
||||
|
||||
### `secretsmanager:GetSecretValue`
|
||||
|
||||
Ein Angreifer mit dieser Berechtigung kann den **gespeicherten Wert innerhalb eines Secrets** in AWS **Secretsmanager** abrufen.
|
||||
Ein attacker mit dieser Berechtigung kann den **gespeicherten Wert in einem Secret** in AWS **Secretsmanager** abrufen.
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
|
||||
```
|
||||
**Potential Impact:** Zugriff auf hochsensible Daten im AWS Secrets Manager Service.
|
||||
**Mögliche Auswirkung:** Zugriff auf hochsensible Daten im AWS Secrets Manager.
|
||||
|
||||
> [!WARNING]
|
||||
> Beachte, dass selbst mit der Berechtigung `secretsmanager:BatchGetSecretValue` ein Angreifer zusätzlich `secretsmanager:GetSecretValue` benötigen würde, um die sensiblen secrets abzurufen.
|
||||
> Beachte, dass selbst mit der Berechtigung `secretsmanager:BatchGetSecretValue` ein Angreifer außerdem `secretsmanager:GetSecretValue` benötigt, um die sensiblen Secrets abzurufen.
|
||||
|
||||
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
|
||||
|
||||
Mit den vorherigen Berechtigungen ist es möglich, **anderen principals/accounts (even external)** Zugriff auf das **secret** zu gewähren. Beachte, dass ein Benutzer, um **secrets zu lesen, die mit einem KMS key verschlüsselt** sind, außerdem **Zugriff auf den KMS key** benötigt (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
Mit den vorherigen Berechtigungen ist es möglich, **anderen principals/accounts (auch externen) Zugriff zu gewähren**, um auf das **secret** zuzugreifen. Beachte, dass zum **Lesen von mit einem KMS-Key verschlüsselten Secrets** der Benutzer außerdem **Zugriff auf den KMS-Key** benötigt (more info in the [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