AWS - ECS Post Exploitation

Apoie o HackTricks

ECS

Para mais informações, consulte:

AWS - ECS Enum

Funções IAM do Host

No ECS, uma função IAM pode ser atribuída à tarefa em execução 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, potencialmente poderá obter a função IAM associada ao ECR e à instância EC2. Para mais informações sobre como obter essas credenciais, consulte:

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

Privilégios para o nó para roubar credenciais e segredos de outros contêineres

Além disso, o EC2 usa o docker para executar tarefas do 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é entrar neles e roubar suas funções IAM anexadas.

Fazendo contêineres serem executados 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 sendo usadas como nós dentro do cluster. Um atacante poderia modificar o estado de uma instância para DRAINING, então o ECS irá 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 ao remover o registro da instância EC2 do cluster. Isso é potencialmente menos furtivo, mas irá 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 é indicar ao ECS que a tarefa ou contêiner foi interrompido. 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 dos contêineres ECR

A instância EC2 provavelmente terá permissão ecr:GetAuthorizationToken permitindo baixar imagens (você poderia procurar informações sensíveis nelas).

Last updated