diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index e88e1d7aa..845ca2e17 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -4,22 +4,22 @@ ## Secrets Manager -Więcej informacji: +Aby uzyskać więcej informacji, sprawdź: {{#ref}} ../aws-services/aws-secrets-manager-enum.md {{#endref}} -### Read Secrets +### Odczyt sekretów -**Sekrety same w sobie są informacjami wrażliwymi**, [sprawdź stronę privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) aby dowiedzieć się, jak je odczytać. +Sekrety są informacjami wrażliwymi, [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md) aby dowiedzieć się, jak je odczytać. ### DoS Change Secret Value -Zmieniając wartość sekretu możesz **spowodować DoS wszystkich systemów, które zależą od tej wartości.** +Zmieniając wartość sekretu, możesz spowodować **DoS wszystkich systemów zależnych od tej wartości.** > [!WARNING] -> Należy pamiętać, że poprzednie wartości są również przechowywane, więc łatwo jest po prostu powrócić do poprzedniej wartości. +> Należy pamiętać, że poprzednie wartości są również przechowywane, więc łatwo jest po prostu wrócić do poprzedniej wartości. ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ @@ -28,11 +28,11 @@ aws secretsmanager put-secret-value \ ``` ### DoS Change KMS key -Jeśli attacker ma uprawnienie secretsmanager:UpdateSecret, może skonfigurować secret tak, aby używał KMS key należącego do attacker. Ten KMS key jest początkowo ustawiony w taki sposób, że każdy może mieć do niego dostęp i go używać, więc aktualizacja secret z użyciem nowego KMS key jest możliwa. Gdyby KMS key nie był dostępny, secret nie mógłby zostać zaktualizowany. +Jeśli attacker ma uprawnienie secretsmanager:UpdateSecret, może skonfigurować secret tak, aby używał KMS key należącego do attacker. Ten klucz jest początkowo ustawiony w taki sposób, że każdy może uzyskać do niego dostęp i go używać, więc aktualizacja secret z nowym kluczem jest możliwa. Gdyby klucz nie był dostępny, secret nie mógłby zostać zaktualizowany. -Po zmianie KMS key dla secret, attacker modyfikuje konfigurację swojego KMS key tak, aby tylko on miał do niego dostęp. W ten sposób w kolejnych wersjach secret będzie szyfrowany nowym KMS key, a ponieważ nie będzie dostępu do tego KMS key, możliwość pobrania secret zostanie utracona. +Po zmianie klucza dla secret attacker modyfikuje konfigurację swojego klucza tak, aby tylko on mógł mieć do niego dostęp. W ten sposób w kolejnych wersjach secret będzie szyfrowany nowym kluczem, a ponieważ nie ma do niego dostępu, możliwość odzyskania secret zostanie utracona. -Ważne jest, aby zauważyć, że ta niedostępność wystąpi dopiero w późniejszych wersjach, po zmianie zawartości secret, ponieważ bieżąca wersja jest nadal zaszyfrowana oryginalnym KMS key. +Ważne jest, aby pamiętać, że ta niedostępność wystąpi tylko w późniejszych wersjach, po zmianie zawartości secret, ponieważ bieżąca wersja nadal jest zaszyfrowana oryginalnym KMS key. ```bash aws secretsmanager update-secret \ --secret-id MyTestSecret \ @@ -40,7 +40,7 @@ aws secretsmanager update-secret \ ``` ### DoS Usuwanie sekretu -Minimalna liczba dni potrzebna do usunięcia sekretu wynosi 7 +Minimalna liczba dni potrzebna do usunięcia sekretu to 7 ```bash aws secretsmanager delete-secret \ --secret-id MyTestSecret \ @@ -48,29 +48,29 @@ aws secretsmanager delete-secret \ ``` ## secretsmanager:RestoreSecret -Możliwe jest przywrócenie secretu, co pozwala na przywrócenie secretów zaplanowanych do usunięcia — minimalny okres usuwania secretów to 7 dni, a maksymalny 30 dni. W połączeniu z uprawnieniem secretsmanager:GetSecretValue umożliwia to pobranie ich zawartości. +Możliwe jest przywrócenie sekretu, co umożliwia odzyskanie sekretów zaplanowanych do usunięcia, ponieważ minimalny okres usuwania sekretów wynosi 7 dni, a maksymalny 30 dni. W połączeniu z uprawnieniem secretsmanager:GetSecretValue, pozwala to na odzyskanie ich zawartości. -Aby odzyskać secret, który jest w trakcie usuwania, możesz użyć następującego polecenia: +Aby odzyskać sekret, który jest w trakcie usuwania, możesz użyć następującego polecenia: ```bash aws secretsmanager restore-secret \ --secret-id ``` ## secretsmanager:DeleteResourcePolicy -Ta akcja pozwala usunąć politykę zasobów, która kontroluje, kto może uzyskać dostęp do secret. Może to doprowadzić do DoS, jeśli polityka zasobów była skonfigurowana tak, aby zezwalać na dostęp tylko określonej grupie użytkowników. +Ta akcja pozwala na usunięcie polityki zasobu, która kontroluje, kto może uzyskać dostęp do sekretu. Może to doprowadzić do DoS, jeśli polityka zasobu była skonfigurowana tak, aby umożliwić dostęp określonej grupie użytkowników. -Aby usunąć politykę zasobów: +Aby usunąć politykę zasobu: ```bash aws secretsmanager delete-resource-policy \ --secret-id ``` ## secretsmanager:UpdateSecretVersionStage -Stany sekretu są używane do zarządzania wersjami sekretu. AWSCURRENT oznacza aktywną wersję, której używają aplikacje, AWSPREVIOUS przechowuje poprzednią wersję, aby można było przywrócić ją w razie potrzeby, a AWSPENDING jest używany w procesie rotacji do przygotowania i walidacji nowej wersji przed ustawieniem jej jako bieżącej. +Stany sekretu służą do zarządzania wersjami sekretu. AWSCURRENT oznacza aktywną wersję używaną przez aplikacje, AWSPREVIOUS przechowuje poprzednią wersję, aby można było przywrócić ją w razie potrzeby, a AWSPENDING jest używany w procesie rotacji do przygotowania i walidacji nowej wersji przed ustaleniem jej jako obecnej. -Aplikacje zawsze odczytują wersję oznaczoną AWSCURRENT. Jeśli ktoś przeniesie tę etykietę na niewłaściwą wersję, aplikacje będą używać nieprawidłowych poświadczeń i mogą nie działać. +Aplikacje zawsze odczytują wersję oznaczoną jako AWSCURRENT. Jeśli ktoś przeniesie tę etykietę na niewłaściwą wersję, aplikacje będą używać nieprawidłowych danych uwierzytelniających i mogą zawieść. -AWSPREVIOUS nie jest używane automatycznie. Jednak jeśli AWSCURRENT zostanie usunięte lub przypisane nieprawidłowo, może się wydawać, że wszystko nadal działa na poprzedniej wersji. +AWSPREVIOUS nie jest używane automatycznie. Jednak jeśli AWSCURRENT zostanie usunięte lub błędnie przypisane, może się wydawać, że wszystko nadal działa na poprzedniej wersji. ```bash aws secretsmanager update-secret-version-stage \ --secret-id \ @@ -79,3 +79,48 @@ aws secretsmanager update-secret-version-stage \ --remove-from-version-id ``` {{#include ../../../banners/hacktricks-training.md}} + +### Mass Secret Exfiltration via BatchGetSecretValue (do 20 na wywołanie) + +Wykorzystaj API Secrets Manager BatchGetSecretValue, aby pobrać do 20 sekretów w jednym żądaniu. To może znacząco zmniejszyć liczbę wywołań API w porównaniu z iterowaniem GetSecretValue dla każdego sekretu. Jeśli używane są filtry (tags/name), wymagane jest również uprawnienie ListSecrets. CloudTrail nadal rejestruje jedno zdarzenie GetSecretValue dla każdego sekretu pobranego w partii. + +Wymagane uprawnienia +- secretsmanager:BatchGetSecretValue +- secretsmanager:GetSecretValue dla każdego docelowego sekretu +- secretsmanager:ListSecrets jeśli używasz --filters +- kms:Decrypt na CMKach używanych przez sekrety (jeśli nie używasz aws/secretsmanager) + +> [!WARNING] +> Zwróć uwagę, że uprawnienie `secretsmanager:BatchGetSecretValue` samo w sobie nie wystarcza do pobrania sekretów — potrzebujesz także `secretsmanager:GetSecretValue` dla każdego sekretu, który chcesz pobrać. + +Exfiltrate by explicit list +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +Exfiltrate przez filtry (tag key/value lub 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 +``` +Obsługa częściowych awarii +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +Wpływ +- Szybki “smash-and-grab” wielu sekretów przy mniejszej liczbie wywołań API, potencjalnie omijający alerty dostrojone do skoków GetSecretValue. +- Logi CloudTrail nadal zawierają jedno zdarzenie GetSecretValue na każdy sekret pobrany w tej partii. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index cb798b87a..cdf0ed153 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -Aby uzyskać więcej informacji o Secrets Manager, zobacz: +Aby uzyskać więcej informacji o Secrets Manager, sprawdź: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,18 +12,18 @@ Aby uzyskać więcej informacji o Secrets Manager, zobacz: ### `secretsmanager:GetSecretValue` -Atakujący z tym uprawnieniem może uzyskać **zapisaną wartość wewnątrz sekretu** w AWS **Secretsmanager**. +Atakujący z tym uprawnieniem może odczytać **zapisaną wartość wewnątrz sekretu** w AWS **Secretsmanager**. ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**Potencjalny wpływ:** Uzyskanie dostępu do wysoce wrażliwych danych w AWS secrets manager service. +**Potencjalny wpływ:** Dostęp do wysoce wrażliwych danych w usłudze AWS secrets manager. > [!WARNING] -> Należy pamiętać, że nawet mając uprawnienie `secretsmanager:BatchGetSecretValue`, atakujący będzie również potrzebował `secretsmanager:GetSecretValue`, aby pobrać wrażliwe sekrety. +> Należy pamiętać, że nawet przy uprawnieniu `secretsmanager:BatchGetSecretValue` atakujący będzie również potrzebował `secretsmanager:GetSecretValue`, aby pobrać wrażliwe sekrety. ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -Dzięki powyższym uprawnieniom możliwe jest **udzielenie dostępu innym principalom/kontom (nawet zewnętrznym)** do **sekretu**. Zwróć uwagę, że aby **odczytać sekrety zaszyfrowane** kluczem KMS, użytkownik musi również mieć **dostęp do klucza KMS** (więcej informacji na [KMS Enum page](../aws-services/aws-kms-enum.md)). +Dzięki powyższym uprawnieniom możliwe jest **przyznanie dostępu innym principalom/kontom (nawet zewnętrznym)** do **sekretu**. Należy pamiętać, że aby **odczytać sekrety zaszyfrowane** kluczem KMS, użytkownik musi również mieć **dostęp do klucza KMS** (więcej informacji na [KMS Enum page](../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id