AWS - ECS Privesc
ECS
Mais informações sobre ECS em:
pageAWS - ECS Enumiam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
Um atacante que abusa das permissões iam:PassRole
, ecs:RegisterTaskDefinition
e ecs:RunTask
no ECS pode gerar uma nova definição de tarefa com um contêiner malicioso que rouba as credenciais de metadados e executá-lo.
Impacto Potencial: Privesc direto para uma função ECS diferente.
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Assim como no exemplo anterior, um atacante que abusa das permissões iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
no ECS pode gerar uma nova definição de tarefa com um contêiner malicioso que rouba as credenciais de metadados e executá-lo.
No entanto, neste caso, é necessário ter uma instância de contêiner 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 que abusa das permissões iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
ou ecs:CreateService
no ECS pode gerar uma nova definição de tarefa com um contêiner 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.
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
.
Ainda é interessante porque se você puder executar um contêiner arbitrário, mesmo que seja 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 em execução no nó.
Você até poderia forçar outras tarefas a serem executadas dentro da instância EC2 que você comprometeu para roubar suas credenciais (conforme discutido na seção Privesc para o 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 extrair 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 (o 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 tiver
ecs:RunTask
, execute uma tarefa comaws ecs run-task --enable-execute-command [...]
Se ele tiver
ecs:StartTask
, execute uma tarefa comaws ecs start-task --enable-execute-command [...]
Se ele tiver
ecs:CreateService
, crie um serviço comaws ecs create-service --enable-execute-command [...]
Se ele tiver
ecs:UpdateService
, atualize um serviço comaws ecs update-service --enable-execute-command [...]
Você pode encontrar exemplos dessas opções nas seções anteriores de privesc do ECS.
Impacto Potencial: Privesc para uma função diferente anexada 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 o ECS:
pageAWS - 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 o ECS:
pageAWS - 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 principal. 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
Última actualización