AWS - ECS Post Exploitation

Suporte ao HackTricks

ECS

Para mais informações, confira:

Funções IAM do Host

No ECS, uma função IAM pode ser atribuída à tarefa que está sendo executada dentro do contêiner. Se a tarefa for executada dentro de uma instância EC2, a instância EC2 terá outra função IAM anexada a ela. Isso significa que se você conseguir comprometer uma instância ECS, poderá potencialmente obter a função IAM associada ao ECR e à instância EC2. Para mais informações sobre como obter essas credenciais, confira:

Observe que se a instância EC2 estiver aplicando IMDSv2, de acordo com a documentação, a resposta da solicitação PUT terá um limite de salto de 1, tornando impossível acessar os metadados da EC2 a partir de um contêiner dentro da instância EC2.

Privesc para nó para roubar credenciais e segredos de outros contêineres

Além disso, o EC2 usa docker para executar tarefas ECs, então se você conseguir escapar para o nó ou acessar o socket do docker, você pode verificar quais outros contêineres estão sendo executados, e até mesmo entrar neles e roubar suas funções IAM anexadas.

Fazendo contêineres rodarem no host atual

Além disso, a função da instância EC2 geralmente terá permissões suficientes para atualizar o estado da instância do contêiner das instâncias EC2 que estão sendo usadas como nós dentro do cluster. Um atacante poderia modificar o estado de uma instância para DRAINING, então o ECS removerá todas as tarefas dela e as que estão sendo executadas como REPLICA serão executadas em uma instância diferente, potencialmente dentro da instância do atacante, para que ele possa roubar suas funções IAM e informações sensíveis potenciais de dentro do contêiner.

aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>

A mesma técnica pode ser feita desregistrando a instância EC2 do cluster. Isso é potencialmente menos furtivo, mas forçará as tarefas a serem executadas em outras instâncias:

aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force

Uma técnica final para forçar a reexecução de tarefas é indicando ao ECS que a tarefa ou contêiner foi parado. Existem 3 APIs potenciais para fazer isso:

# 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 ...

Roubar informações sensíveis de contêineres ECR

A instância EC2 provavelmente também terá a permissão ecr:GetAuthorizationToken, permitindo que ela baixe imagens (você pode procurar por informações sensíveis nelas).

Support HackTricks

Last updated