AWS - ECS Post Exploitation

Support HackTricks

ECS

Pour plus d'informations, consultez :

Rôles IAM de l'hôte

Dans ECS, un rôle IAM peut être attribué à la tâche s'exécutant à l'intérieur du conteneur. Si la tâche est exécutée à l'intérieur d'une instance EC2, l'instance EC2 aura un autre rôle IAM attaché. Ce qui signifie que si vous parvenez à compromettre une instance ECS, vous pouvez potentiellement obtenir le rôle IAM associé à l'ECR et à l'instance EC2. Pour plus d'informations sur la façon d'obtenir ces identifiants, consultez :

Notez que si l'instance EC2 applique IMDSv2, selon la documentation, la réponse de la requête PUT aura une limite de saut de 1, rendant impossible l'accès aux métadonnées EC2 depuis un conteneur à l'intérieur de l'instance EC2.

Privesc vers le nœud pour voler les identifiants et secrets d'autres conteneurs

De plus, EC2 utilise Docker pour exécuter les tâches ECs, donc si vous pouvez échapper au nœud ou accéder au socket Docker, vous pouvez vérifier quels autres conteneurs sont en cours d'exécution, et même entrer à l'intérieur et voler leurs rôles IAM attachés.

Faire fonctionner des conteneurs sur l'hôte actuel

De plus, le rôle de l'instance EC2 aura généralement suffisamment de permissions pour mettre à jour l'état de l'instance de conteneur des instances EC2 utilisées comme nœuds à l'intérieur du cluster. Un attaquant pourrait modifier l'état d'une instance en DRAINING, puis ECS supprimera toutes les tâches de celle-ci et celles exécutées en tant que REPLICA seront exécutées dans une autre instance, potentiellement à l'intérieur de l'instance de l'attaquant afin qu'il puisse voler leurs rôles IAM et des informations sensibles potentielles à l'intérieur du conteneur.

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

La même technique peut être réalisée en désenregistrant l'instance EC2 du cluster. Cela est potentiellement moins furtif mais cela forcera les tâches à être exécutées sur d'autres instances :

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

Une technique finale pour forcer la réexécution des tâches consiste à indiquer à ECS que le tâche ou le conteneur a été arrêté. Il existe 3 API potentielles pour cela :

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

Voler des informations sensibles des conteneurs ECR

L'instance EC2 aura probablement également la permission ecr:GetAuthorizationToken lui permettant de télécharger des images (vous pourriez rechercher des informations sensibles dans celles-ci).

Soutenir HackTricks

Last updated