AWS - ECS Post Exploitation

Apoya a HackTricks

ECS

Para más información consulta:

AWS - 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 adjunto. 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 a 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 ver 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 de 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 están ejecutando como REPLICA se ejecutarán en una instancia diferente, potencialmente dentro de la instancia del atacante para que pueda robar sus roles IAM y potencial información sensible 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 es 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 reejecución de tareas es indicando a ECS que el 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 de EC2 probablemente también tendrá el permiso ecr:GetAuthorizationToken que le permite descargar imágenes (podrías buscar información sensible en ellas).

Support HackTricks

Last updated