AWS - ECS Privesc
ECS
Mais informações sobre ECS em:
AWS - ECS Enumiam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
Um atacante abusando das permissões iam:PassRole
, ecs:RegisterTaskDefinition
e ecs:RunTask
no ECS pode gerar uma nova definição de tarefa com um container malicioso que rouba as credenciais de metadata e executá-lo.
Impacto Potencial: Privesc direto para um papel ECS diferente.
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Assim como no exemplo anterior, um atacante abusando das permissões iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
no ECS pode gerar uma nova definição de tarefa com um container malicioso que rouba as credenciais de metadados e executá-lo.
No entanto, neste caso, é necessário uma instância de container para executar a definição de tarefa maliciosa.
Impacto Potencial: Privesc direto para qualquer função ECS.
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
Assim como no exemplo anterior, um atacante abusando das permissões iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
ou ecs:CreateService
no ECS pode gerar uma nova definição de tarefa com um container malicioso que rouba as credenciais de metadados e executá-lo criando um novo serviço com pelo menos 1 tarefa em execução.
Impacto Potencial: Privesc direto para qualquer função ECS.
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
Na verdade, apenas com essas permissões é possível usar substituições para executar comandos arbitrários em um contêiner com uma função arbitrária com algo como:
Impacto Potencial: Privesc direto para qualquer função ECS.
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Este cenário é semelhante aos anteriores, mas sem a permissão iam:PassRole
.
Isso ainda é interessante porque, se você pode executar um contêiner arbitrário, mesmo sem uma função, você poderia executar um contêiner privilegiado para escapar para o nó e roubar a função IAM do EC2 e as outras funções dos contêineres ECS que estão sendo executados no nó.
Você poderia até forçar outras tarefas a serem executadas dentro da instância EC2 que você comprometer para roubar suas credenciais (como discutido na seção Privesc para nó).
Este ataque só é possível se o cluster ECS estiver usando instâncias EC2 e não 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)
Um atacante com as permissões ecs:ExecuteCommand
, ecs:DescribeTasks
pode executar comandos dentro de um contêiner em execução e exfiltrar a função IAM anexada a ele (você precisa das permissões de descrição porque é necessário executar aws ecs execute-command
).
No entanto, para fazer isso, a instância do contêiner precisa estar executando o agente ExecuteCommand (que por padrão não está).
Portanto, o atacante pode tentar:
Tentar executar um comando em cada contêiner em execução
Se ele tem
ecs:RunTask
, execute uma tarefa comaws ecs run-task --enable-execute-command [...]
Se ele tem
ecs:StartTask
, execute uma tarefa comaws ecs start-task --enable-execute-command [...]
Se ele tem
ecs:CreateService
, crie um serviço comaws ecs create-service --enable-execute-command [...]
Se ele tem
ecs:UpdateService
, atualize um serviço comaws ecs update-service --enable-execute-command [...]
Você pode encontrar exemplos dessas opções em seções anteriores de privesc do ECS.
Impacto Potencial: Privesc para um papel diferente anexado aos contêineres.
ssm:StartSession
ssm:StartSession
Verifique na página de privesc do ssm como você pode abusar dessa permissão para privesc para ECS:
AWS - SSM Privesciam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Verifique na página de privesc do ec2 como você pode abusar dessas permissões para privesc para ECS:
AWS - EC2 Privesc?ecs:RegisterContainerInstance
?ecs:RegisterContainerInstance
TODO: É possível registrar uma instância de uma conta AWS diferente para que as tarefas sejam executadas em máquinas controladas pelo atacante??
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
TODO: Testar isso
Um atacante com as permissões ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
e ecs:DescribeTaskSets
pode criar um conjunto de tarefas malicioso para um serviço ECS existente e atualizar o conjunto de tarefas primário. Isso permite que o atacante execute código arbitrário dentro do serviço.
Impacto Potencial: Executar código arbitrário no serviço afetado, potencialmente impactando sua funcionalidade ou exfiltrando dados sensíveis.
Referências
Last updated