AWS - ECS Enum

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

ECS

Basic Information

Amazon Elastic Container Services ou ECS fournit une plateforme pour hĂ©berger des applications conteneurisĂ©es dans le cloud. ECS a deux mĂ©thodes de dĂ©ploiement, le type d’instance EC2 et une option serverless, Fargate. Le service rend l’exĂ©cution de conteneurs dans le cloud trĂšs simple et sans douleur.

ECS fonctionne à l’aide des trois blocs de construction suivants : Clusters, Services, et Task Definitions.

  • Les Clusters sont des groupes de conteneurs qui s’exĂ©cutent dans le cloud. Comme mentionnĂ© prĂ©cĂ©demment, il existe deux types de lancement pour les conteneurs : EC2 et Fargate. AWS dĂ©finit le type de lancement EC2 comme permettant aux clients “d’exĂ©cuter [leurs] applications conteneurisĂ©es sur un cluster d’instances Amazon EC2 que [ils] gĂšrent”. Fargate est similaire et est dĂ©fini comme “[vous permettant] d’exĂ©cuter vos applications conteneurisĂ©es sans avoir besoin de provisionner et gĂ©rer l’infrastructure backend”.
  • Les Services sont créés au sein d’un cluster et sont responsables de l’exĂ©cution des tasks. Dans une dĂ©finition de service, vous dĂ©finissez le nombre de tasks Ă  exĂ©cuter, l’auto scaling, le capacity provider (Fargate/EC2/External), des informations de networking telles que VPC, subnets, et security groups.
  • Il y a 2 types d’applications :
  • Service : Un groupe de tasks qui gĂšre un travail de calcul de longue durĂ©e pouvant ĂȘtre arrĂȘtĂ© et redĂ©marrĂ©. Par exemple, une application web.
  • Task : Une task autonome qui s’exĂ©cute puis se termine. Par exemple, un batch job.
  • Parmi les applications de service, il existe 2 types de service schedulers :
  • REPLICA : La stratĂ©gie de scheduling replica place et maintient le nombre souhaitĂ© de tasks Ă  travers votre cluster. Si, pour une raison quelconque, une task s’arrĂȘte, une nouvelle est lancĂ©e sur le mĂȘme nƓud ou sur un nƓud diffĂ©rent.
  • DAEMON : DĂ©ploie exactement une task sur chaque instance de conteneur active qui possĂšde les exigences nĂ©cessaires. Il n’est pas nĂ©cessaire de spĂ©cifier un nombre souhaitĂ© de tasks, une stratĂ©gie de placement des tasks, ni d’utiliser des politiques Service Auto Scaling.
  • Les Task Definitions sont responsables de dĂ©finir quels conteneurs vont s’exĂ©cuter et les diffĂ©rents paramĂštres qui seront configurĂ©s avec les conteneurs, tels que les port mappings avec l’hĂŽte, les env variables, le Docker entrypoint

  • VĂ©rifiez les env variables pour des infos sensibles !

Sensitive Data In Task Definitions

Les task definitions sont responsables de configurer les conteneurs rĂ©els qui vont s’exĂ©cuter dans ECS. Puisque les task definitions dĂ©finissent comment les conteneurs vont s’exĂ©cuter, une multitude d’informations peut s’y trouver.

Pacu peut énumérer ECS (list-clusters, list-container-instances, list-services, list-task-definitions), il peut aussi dumper les 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>

ÉnumĂ©ration sur l’hĂŽte via la base de donnĂ©es d’état de l’ECS Agent (agent.db)

Lorsque vous avez un accĂšs shell sur une instance de conteneur ECS , ou que vous avez Ă©chappĂ© Ă  un conteneur avec un bind-mount de l’hĂŽte de /var/lib/ecs (une mauvaise configuration courante lorsque les tasks s’exĂ©cutent en mode privilĂ©giĂ© ou avec volumesFrom exposant le rĂ©pertoire de donnĂ©es de l’hĂŽte), l’agent ECS laisse agent.db sur le disque, qui peut ĂȘtre lu sans aucun appel AWS API, sans aucune permission IAM, et sans dĂ©clencher CloudTrail.

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

(ou, lors de la lecture depuis un container qui a le host monté sur /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

Ce que vous pouvez récupérer

Selon l’ñge du cluster et le churn de la charge de travail, strings sur agent.db donne gĂ©nĂ©ralement :

  • ARN des rĂŽles IAM de task et d’exĂ©cution (taskRoleArn, executionRoleArn) pour chaque task que l’agent a exĂ©cutĂ©e — cibles utiles pour credential retrieval via the task metadata endpoint (169.254.170.2).
  • DĂ©finitions complĂštes des tasks — URI d’images (souvent des repos ECR privĂ©s), command, entrypoint, port mappings, mount points, configuration de logs, et variables d’environnement en clair qui incluent frĂ©quemment des URLs de base de donnĂ©es, des tokens API et des secrets tiers.
  • RĂ©fĂ©rences de secrets — blocs secretOptions et secrets pointant vers des chemins SSM Parameter Store et des ARN Secrets Manager (excellente liste de pivot).
  • ARN de container instance, ARN de cluster et token d’enregistrement — confirme le nom du cluster et le contexte account/region sans appel API.
  • MĂ©tadonnĂ©es ENI — IP privĂ©es, adresses MAC, IDs de subnet et IDs de security group attribuĂ©s en mode awsvpc (utile pour la planification du lateral movement).
  • Identifiants de pull d’image — quand la task definition utilise repositoryCredentials, l’ARN Secrets Manager rĂ©fĂ©rencĂ© se trouve ici ; sur les anciens agents, les blobs d’authentification de private-registry (ECS_ENGINE_AUTH_DATA) peuvent aussi ĂȘtre mis en cache.
  • Containers de tasks rĂ©cemment arrĂȘtĂ©es — y compris les noms, IDs, exit codes et labels, parfois bien aprĂšs que l’appel correspondant aws ecs describe-tasks ait expirĂ© de la rĂ©ponse API.

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

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks