AWS - EKS Post Exploitation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Per ulteriori informazioni controlla
AWS - EKS EnumSe hai il permesso eks:AccessKubernetesApi
puoi visualizzare gli oggetti Kubernetes tramite la console AWS EKS (Scopri di più).
Modo semplice:
Non è un modo così semplice:
Se puoi ottenere un token con aws eks get-token --name <cluster_name>
ma non hai i permessi per ottenere informazioni sul cluster (describeCluster), potresti preparare il tuo ~/.kube/config
. Tuttavia, avendo il token, hai ancora bisogno dell'url endpoint a cui connetterti (se sei riuscito a ottenere un token JWT da un pod leggi qui) e del nome del cluster.
Nel mio caso, non ho trovato le informazioni nei log di CloudWatch, ma le ho trovate in LaunchTemplates userData e in macchine EC2 in userData anche. Puoi vedere queste informazioni in userData facilmente, ad esempio nel seguente esempio (il nome del cluster era cluster-name):
Il creatore del cluster EKS sarà SEMPR in grado di accedere alla parte del cluster kubernetes del gruppo system:masters
(admin k8s). Al momento della scrittura non c'è modo diretto per scoprire chi ha creato il cluster (puoi controllare CloudTrail). E non c'è modo di rimuovere quel privilegio.
Il modo per concedere accesso a più utenti o ruoli AWS IAM su K8s è utilizzare il configmap aws-auth
.
Pertanto, chiunque abbia accesso in scrittura sulla config map aws-auth
sarà in grado di compromettere l'intero cluster.
Per ulteriori informazioni su come concedere privilegi extra a ruoli e utenti IAM nello stesso o diverso account e come abusare di questo per privesc controlla questa pagina.
Controlla anche questo fantastico post per imparare come funziona l'autenticazione IAM -> Kubernetes.
È possibile consentire un autenticazione OpenID per l'account di servizio kubernetes per consentire loro di assumere ruoli in AWS. Scopri come questo funziona in questa pagina.
Decodificando il token JWT otteniamo l'id del cluster e anche la regione. Sapendo che il formato standard per l'url EKS è
Non ho trovato alcuna documentazione che spieghi i criteri per i 'due caratteri' e il 'numero'. Ma facendo alcuni test per conto mio vedo che ricorrono questi:
gr7
yl4
Comunque sono solo 3 caratteri che possiamo bruteforzare. Usa lo script qui sotto per generare la lista.
Poi con wfuzz
Ricorda di sostituire & .
Se un attaccante ottiene le credenziali di un AWS con permessi su un EKS. Se l'attaccante configura il proprio kubeconfig
(senza chiamare update-kubeconfig
) come spiegato in precedenza, il get-token
non genera log in Cloudtrail perché non interagisce con l'API AWS (crea solo il token localmente).
Quindi, quando l'attaccante comunica con il cluster EKS, cloudtrail non registrerà nulla relativo all'utente rubato e al suo accesso.
Nota che il cluster EKS potrebbe avere i log abilitati che registreranno questo accesso (anche se, per impostazione predefinita, sono disabilitati).
Per impostazione predefinita, l'utente o il ruolo che ha creato un cluster avrà SEMPRE privilegi di amministratore sul cluster. E che l'unico accesso "sicuro" che AWS avrà sul cluster Kubernetes.
Quindi, se un attaccante compromette un cluster utilizzando fargate e rimuove tutti gli altri amministratori e elimina l'utente/ruolo AWS che ha creato il Cluster, l'attaccante potrebbe aver riscattato il clusterr.
Nota che se il cluster stava utilizzando EC2 VMs, potrebbe essere possibile ottenere privilegi di amministratore dal Node e recuperare il cluster.
In realtà, se il cluster utilizza Fargate, potresti utilizzare nodi EC2 o spostare tutto su EC2 nel cluster e recuperarlo accedendo ai token nel nodo.
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)