AWS - ECS Privesc
ECS
Más info sobre ECS en:
AWS - ECS Enumiam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
Un atacante que abuse de los permisos iam:PassRole
, ecs:RegisterTaskDefinition
y ecs:RunTask
en ECS puede generar una nueva definición de tarea con un contenedor malicioso que roba las credenciales de metadatos y ejecutarlo.
Impacto Potencial: Privilegios directos a un rol diferente de ECS.
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Al igual que en el ejemplo anterior, un atacante que abuse de los permisos iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
en ECS puede generar una nueva definición de tarea con un contenedor malicioso que roba las credenciales de metadatos y ejecutarlo.
Sin embargo, en este caso, se necesita una instancia de contenedor para ejecutar la definición de tarea maliciosa.
Impacto Potencial: Privesc directo a cualquier rol de ECS.
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
Al igual que en el ejemplo anterior, un atacante que abuse de los permisos iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
o ecs:CreateService
en ECS puede generar una nueva definición de tarea con un contenedor malicioso que roba las credenciales de metadatos y ejecutarlo creando un nuevo servicio con al menos 1 tarea en ejecución.
Impacto Potencial: Privesc directo a cualquier rol de ECS.
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
De hecho, solo con esos permisos es posible usar overrides para ejecutar comandos arbitrarios en un contenedor con un rol arbitrario con algo como:
Impacto Potencial: Privesc directo a cualquier rol de ECS.
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Este escenario es similar a los anteriores pero sin el permiso iam:PassRole
.
Esto sigue siendo interesante porque si puedes ejecutar un contenedor arbitrario, incluso si es sin un rol, podrías ejecutar un contenedor privilegiado para escapar al nodo y robar el rol IAM de EC2 y los otros roles de contenedores ECS que se ejecutan en el nodo.
Incluso podrías forzar que otras tareas se ejecuten dentro de la instancia EC2 que comprometes para robar sus credenciales (como se discute en la sección Privesc to node).
Este ataque solo es posible si el cluster ECS está usando instancias EC2 y no Fargate.
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Un atacante con los permisos ecs:ExecuteCommand
, ecs:DescribeTasks
puede ejecutar comandos dentro de un contenedor en ejecución y exfiltrar el rol IAM adjunto a él (necesitas los permisos de describe porque es necesario ejecutar aws ecs execute-command
).
Sin embargo, para hacer eso, la instancia del contenedor necesita estar ejecutando el agente ExecuteCommand (que por defecto no lo está).
Por lo tanto, el atacante podría intentar:
Intentar ejecutar un comando en cada contenedor en ejecución
Si tiene
ecs:RunTask
, ejecuta una tarea conaws ecs run-task --enable-execute-command [...]
Si tiene
ecs:StartTask
, ejecuta una tarea conaws ecs start-task --enable-execute-command [...]
Si tiene
ecs:CreateService
, crea un servicio conaws ecs create-service --enable-execute-command [...]
Si tiene
ecs:UpdateService
, actualiza un servicio conaws ecs update-service --enable-execute-command [...]
Puedes encontrar ejemplos de esas opciones en secciones anteriores de privesc de ECS.
Impacto Potencial: Privesc a un rol diferente adjunto a contenedores.
ssm:StartSession
ssm:StartSession
Consulta en la página de ssm privesc cómo puedes abusar de este permiso para privesc a ECS:
AWS - SSM Privesciam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Consulta en la página de ec2 privesc cómo puedes abusar de estos permisos para privesc a ECS:
AWS - EC2 Privesc?ecs:RegisterContainerInstance
?ecs:RegisterContainerInstance
TODO: ¿Es posible registrar una instancia desde una cuenta de AWS diferente para que las tareas se ejecuten en máquinas controladas por el atacante?
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
TODO: Probar esto
Un atacante con los permisos ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
y ecs:DescribeTaskSets
puede crear un conjunto de tareas malicioso para un servicio ECS existente y actualizar el conjunto de tareas principal. Esto permite al atacante ejecutar código arbitrario dentro del servicio.
Impacto Potencial: Ejecutar código arbitrario en el servicio afectado, potencialmente impactando su funcionalidad o exfiltrando datos sensibles.
Referencias
Last updated