AWS - EKS Post Exploitation
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Treinamento AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Treinamento 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á nenhuma 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 ao K8s para mais usuários ou funções do AWS IAM é 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 do 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.
Então, 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 rendido o cluster.
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)