AWS - ECS Post Exploitation

Apoya a HackTricks

ECS

Para más información consulta:

AWS - ECS Enum

Roles IAM del 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 adjunto a ella. Lo que significa que si logras comprometer una instancia de ECS, potencialmente puedes 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.

Escalada de privilegios al nodo para robar credenciales y secretos de otros contenedores

Además, EC2 utiliza Docker para ejecutar tareas de ECS, por lo que si puedes escapar al nodo o acceder al socket de Docker, puedes verificar qué otros contenedores se están ejecutando e incluso ingresar 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 se ejecutarán 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 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 reejecución de tareas es indicar 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

Es probable que la instancia EC2 también tenga el permiso ecr:GetAuthorizationToken que le permite descargar imágenes (puedes buscar información sensible en ellas).

Last updated