AWS - ECS Post Exploitation

Aprende hacking de AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

ECS

Para más información consulta:

pageAWS - ECS Enum

Roles IAM de Host

En ECS, un rol IAM puede ser asignado a la tarea que se ejecuta dentro del contenedor. Si la tarea se ejecuta dentro de una instancia EC2, la instancia EC2 tendrá otro rol IAM asociado a ella. Lo que significa que si logras comprometer una instancia ECS, puedes potencialmente obtener el rol IAM asociado al ECR y a la instancia EC2. Para más información sobre cómo obtener esas credenciales consulta:

Ten en cuenta que si la instancia EC2 está aplicando IMDSv2, según la documentación, la respuesta de la solicitud PUT tendrá un límite de salto de 1, lo que hace imposible acceder a los metadatos de EC2 desde un contenedor dentro de la instancia EC2.

Privesc al nodo para robar credenciales y secretos de otros contenedores

Además, EC2 utiliza docker para ejecutar tareas de ECS, así que si puedes escapar al nodo o acceder al socket de docker, puedes verificar qué otros contenedores se están ejecutando, e incluso entrar en ellos y robar sus roles IAM adjuntos.

Haciendo que los contenedores se ejecuten en el host actual

Además, el rol de la instancia EC2 generalmente tendrá suficientes permisos para actualizar el estado de la instancia del contenedor de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el estado de una instancia a DRAINING, entonces ECS eliminará todas las tareas de ella y las que se ejecutan como REPLICA serán ejecutadas en una instancia diferente, potencialmente dentro de la instancia del atacante para que pueda robar sus roles IAM e información sensible potencial desde dentro del contenedor.

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

La misma técnica se puede realizar dando de baja la instancia EC2 del clúster. Esto puede ser potencialmente menos sigiloso pero forzará a que las tareas se ejecuten en otras instancias:

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

Una técnica final para forzar la re-ejecución de tareas es indicando a ECS que la tarea o contenedor fue detenido. Hay 3 APIs potenciales para hacer esto:

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

Robar información sensible de contenedores ECR

La instancia EC2 probablemente también tendrá el permiso ecr:GetAuthorizationToken que le permite descargar imágenes (podrías buscar información sensible en ellas).

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización