AWS - ECS Enum

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

ECS

Basic Information

Amazon Elastic Container Services ili ECS pruža platformu za hostovanje kontejnerizovanih aplikacija u cloudu. ECS ima dva deployment metoda, tip instance EC2 i serverless opciju, Fargate. Ovaj servis omogućava veoma lako i bezbolno pokretanje kontejnera u cloudu.

ECS radi koristeći sledeća tri building blocks: Clusters, Services, i Task Definitions.

  • Clusters su grupe kontejnera koje rade u cloudu. Kao što je ranije pomenuto, postoje dva launch type-a za kontejnere, EC2 i Fargate. AWS definiše EC2 launch type kao mogućnost da korisnici “pokrenu [svoje] containerized applications na cluster-u Amazon EC2 instances koje [oni] manage”. Fargate je sličan i definiše se kao “[omogućava] vam da pokrenete vaše containerized applications bez potrebe da provision-ujete i manage-ujete backend infrastrukturu”.
  • Services se kreiraju unutar cluster-a i odgovorni su za pokretanje tasks. Unutar definicije service-a definišete broj tasks koje treba pokrenuti, auto scaling, capacity provider (Fargate/EC2/External), networking informacije kao što su VPC-jevi, subnets i security groups.
  • Postoje 2 vrste aplikacija:
  • Service: Grupa tasks koja obrađuje dugotrajni computing work koji može da se zaustavi i ponovo pokrene. Na primer, web aplikacija.
  • Task: Samostalni task koji se pokreće i završava. Na primer, batch job.
  • Među service aplikacijama postoje 2 vrste service schedulers:
  • REPLICA: Replica scheduling strategija postavlja i održava željeni broj tasks kroz vaš cluster. Ako se iz nekog razloga task ugasi, novi se pokreće na istom ili drugom node-u.
  • DAEMON: Deploy-uje tačno jedan task na svakoj aktivnoj container instance koja ima potrebne zahteve. Nije potrebno navoditi željeni broj tasks, task placement strategiju, niti koristiti Service Auto Scaling policies.
  • Task Definitions su odgovorne za definisanje koji će se kontejneri pokretati i različitih parametara koji će biti podešeni za kontejnere, kao što su port mappings sa host-om, env variables, Docker entrypoint
  • Proverite env variables za sensitive info!

Sensitive Data In Task Definitions

Task definitions su odgovorne za konfigurisanje stvarnih kontejnera koji će se pokretati u ECS. Pošto task definitions definišu kako će se kontejneri pokretati, može se pronaći mnogo informacija unutar njih.

Pacu može enumerisati ECS (list-clusters, list-container-instances, list-services, list-task-definitions), a može i dump-ovati task definitions.

Enumeration

# Clusters info
aws ecs list-clusters
aws ecs describe-clusters --clusters <cluster>

# Container instances
## An Amazon ECS container instance is an Amazon EC2 instance that is running the Amazon ECS container agent and has been registered into an Amazon ECS cluster.
aws ecs list-container-instances --cluster <cluster>
aws ecs describe-container-instances --cluster <cluster> --container-instances <container_instance_arn>

# Services info
aws ecs list-services --cluster <cluster>
aws ecs describe-services --cluster <cluster> --services <services>
aws ecs describe-task-sets --cluster <cluster> --service <service>

# Task definitions
aws ecs list-task-definition-families
aws ecs list-task-definitions
aws ecs list-tasks --cluster <cluster>
aws ecs describe-tasks --cluster <cluster> --tasks <tasks>
## Look for env vars and secrets used from the task definition
aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>

On-Host Enumeration via the ECS Agent State DB (agent.db)

Kada imate shell access na ECS container instance , ili ste pobegli iz container-a sa host bind-mount-om od /var/lib/ecs (česta misconfiguration kada tasks rade privileged ili sa volumesFrom koji izlaže host data dir), ECS agent ostavlja agent.db na disku koji može da se pročita bez ikakvog AWS API poziva, bez bilo kakve IAM permission, i bez pokretanja CloudTrail.

/var/lib/ecs/data/agent.db

(ili, kada se čita iz containera koji ima host mountovan na /host, /host/var/lib/ecs/data/agent.db).

# Most useful one-liner — dumps everything readable
strings /var/lib/ecs/data/agent.db

# From inside a container with the host mounted at /host
strings /host/var/lib/ecs/data/agent.db

# Filter for the highest-value artefacts
strings /var/lib/ecs/data/agent.db | grep -aE 'arn:aws:|AKIA|ASIA|"secret|password|TOKEN|credentials|taskRoleArn|executionRoleArn'

# Save the outcome from strings for offline analysis
strings /host/var/lib/ecs/data/agent.db >> /tmp/agent.txt
tr -s '{}[],:"\\' '\n' < /tmp/agent.txt | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' | awk 'NF && length($0)>2 && !/^[0-9.]+$/' | sort -u

What you can recover

Zavisno od starosti klastera i churn-a workload-a, strings nad agent.db obično vraća:

  • Task and execution IAM role ARNs (taskRoleArn, executionRoleArn) za svaki task koji je agent pokrenuo — korisni targeti za credential retrieval via the task metadata endpoint (169.254.170.2).
  • Full task definitions — image URI-jevi (često private ECR repos), command, entrypoint, port mappings, mount points, log configuration, i plaintext environment variables koje često uključuju database URL-ove, API tokene i third-party secrets.
  • Secrets referencessecretOptions i secrets blokovi koji pokazuju na SSM Parameter Store path-ove i Secrets Manager ARNs (odlična pivot lista).
  • Container instance ARN, cluster ARN, and registration token — potvrđuje ime klastera i account/region kontekst bez API poziva.
  • ENI metadata — private IP adrese, MAC adrese, subnet IDs i security group IDs dodeljeni u awsvpc modu (korisno za planiranje lateral movement).
  • Image pull credentials — kada task definition koristi repositoryCredentials, ovde je referenced Secrets Manager ARN; na starijim agentima private-registry auth blob-ovi (ECS_ENGINE_AUTH_DATA) mogu takođe biti keširani.
  • Recently-stopped task containers — uključujući names, IDs, exit codes i labels, ponekad dugo nakon što je odgovarajući aws ecs describe-tasks poziv već izbacio njih iz API odgovora.

Unauthenticated Access

AWS - ECS Unauthenticated Enum

Privesc

In the following page you can check how to abuse ECS permissions to escalate privileges:

AWS - ECS Privesc

Post Exploitation

AWS - ECS Post Exploitation

Persistence

AWS - ECS Persistence

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks