AWS - EKS Post Exploitation
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Para mais informações, confira
AWS - EKS EnumSe você tiver a permissão eks:AccessKubernetesApi
você pode visualizar objetos Kubernetes via console AWS EKS (Saiba mais).
Maneira fácil:
Não é um caminho tão fácil:
Se você conseguir obter um token com aws eks get-token --name <cluster_name>
mas não tiver permissões para obter informações do cluster (describeCluster), você pode preparar seu próprio ~/.kube/config
. No entanto, tendo o token, você ainda precisa da url do endpoint para se conectar (se você conseguiu obter um token JWT de um pod, leia aqui) e o nome do cluster.
No meu caso, não encontrei as informações nos logs do CloudWatch, mas eu encontrai no userData dos LaunchTemplates e nas máquinas EC2 no userData também. Você pode ver essas informações em userData facilmente, por exemplo, no próximo exemplo (o nome do cluster era cluster-name):
O criador do cluster EKS SEMPRE poderá acessar a parte do cluster kubernetes do grupo system:masters
(admin k8s). No momento da redação deste texto, não há uma maneira direta de descobrir quem criou o cluster (você pode verificar o CloudTrail). E não há como remover esse privilégio.
A maneira de conceder acesso a mais usuários ou funções do AWS IAM sobre o K8s é usando o configmap aws-auth
.
Portanto, qualquer pessoa com acesso de escrita sobre o config map aws-auth
poderá comprometer todo o cluster.
Para mais informações sobre como conceder privilégios extras a funções e usuários IAM na mesma ou em outra conta e como abusar disso, verifique esta página.
Confira também este post incrível para aprender como a autenticação IAM -> Kubernetes funciona.
É possível permitir uma autenticação OpenID para a conta de serviço kubernetes para permitir que elas assumam funções na AWS. Aprenda como isso funciona nesta página.
Não encontrei nenhuma documentação que explique os critérios para os 'dois caracteres' e o 'número'. Mas fazendo alguns testes por conta própria, vejo que esses se repetem:
gr7
yl4
De qualquer forma, são apenas 3 caracteres que podemos brute force. Use o script abaixo para gerar a lista.
Então com wfuzz
Lembre-se de substituir & .
Se um atacante obtiver credenciais de um AWS com permissão sobre um EKS. Se o atacante configurar seu próprio kubeconfig
(sem chamar update-kubeconfig
) como explicado anteriormente, o get-token
não gera logs no Cloudtrail porque não interage com a API da AWS (apenas cria o token localmente).
Assim, quando o atacante se comunica com o cluster EKS, o cloudtrail não registrará nada relacionado ao usuário sendo roubado e acessando-o.
Note que o cluster EKS pode ter logs habilitados que registrarão esse acesso (embora, por padrão, estejam desativados).
Por padrão, o usuário ou função que criou um cluster SEMPRE terá privilégios de administrador sobre o cluster. E que o único acesso "seguro" que a AWS terá sobre o cluster Kubernetes.
Assim, se um atacante comprometer um cluster usando fargate e remover todos os outros administradores e deletar o usuário/função da AWS que criou o Cluster, o atacante poderia ter resgatado o clusterr.
Note que se o cluster estivesse usando EC2 VMs, poderia ser possível obter privilégios de Admin a partir do Node e recuperar o cluster.
Na verdade, se o cluster estiver usando Fargate, você poderia EC2 nodes ou mover tudo para EC2 para o cluster e recuperá-lo acessando os tokens no node.
Decodificando o token JWT, obtemos o id do cluster e também a região. Sabendo que o formato padrão para a URL do EKS é
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)