AWS - EKS Post Exploitation
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
EKS
Za više informacija pogledajte
Enumerate the cluster from the AWS Console
Ako imate dozvolu eks:AccessKubernetesApi možete pregledati Kubernetes objekte putem AWS EKS console (Learn more).
Connect to AWS Kubernetes Cluster
- Jednostavan način:
# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
- Ne baš tako lak način:
Ako možete dobijete token pomoću aws eks get-token --name <cluster_name> ali nemate dozvole da dobijete informacije o clusteru (describeCluster), možete pripremiti svoj ~/.kube/config. Međutim, iako imate token, i dalje vam je potreban url endpoint za povezivanje (if you managed to get a JWT token from a pod read here) i ime clustera.
U mom slučaju, nisam pronašao info u CloudWatch logs, ali sam ih pronašao u LaunchTemaplates userData i takođe u EC2 mašinama u userData. Ove informacije možete lako videti u userData, na primer u sledećem primeru (the cluster name was cluster-name):
API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com
/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false
kube config
```yaml describe-cache-parametersapiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com name: arn:aws:eks:us-east-1:Iz AWS-a ka Kubernetesu
The tvorac of the EKS cluster je UVEK going to be able to get into the kubernetes cluster part of the group system:masters (k8s admin). U vreme pisanja ne postoji direktan način da se sazna ko je kreirao klaster (možete proveriti CloudTrail). I ne postoji način da se ukloni taj privilegij.
Način da se dodeli pristup K8s većem broju AWS IAM users or roles je korišćenjem configmap aws-auth.
Warning
Dakle, svako ko ima write access nad config mapom
aws-authmoći će da kompromituje ceo klaster.
Za više informacija o tome kako da dodelite dodatne privilegije IAM roles & users u istom ili drugom account-u i kako to zlorabiti pogledajte privesc check this page.
Takođe pogledajte this awesome post da biste naučili kako funkcioniše autentifikacija IAM -> Kubernetes.
Iz Kubernetes-a ka AWS
Moguće je omogućiti OpenID authentication for kubernetes service account kako bi oni mogli da assume roles u AWS-u. Saznajte kako this work in this page.
GET Api Server Endpoint from a JWT Token
Dekodiranjem JWT tokena dobijemo cluster id i takođe region. Znajući da je standardni format za EKS url je
https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com
Nisam našao nijednu dokumentaciju koja objašnjava kriterijume za ‘dva znaka’ i ‘broj’. Ali prilikom testiranja primetio sam da se ponavljaju ovi primeri:
- gr7
- yl4
U svakom slučaju, to su samo 3 znaka pa ih možemo bruteforce-ovati. Iskoristi skript ispod za generisanje liste
from itertools import product
from string import ascii_lowercase
letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2)
number_combinations = product('0123456789', repeat = 1)
result = [
f'{''.join(comb[0])}{comb[1][0]}'
for comb in product(letter_combinations, number_combinations)
]
with open('out.txt', 'w') as f:
f.write('\n'.join(result))
Zatim sa wfuzz
wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws.com
Warning
Zapamti da zameniš & .
Zaobilaženje CloudTrail
Ako attacker dobije kredencijale za AWS sa permission over an EKS. Ako attacker konfiguriše svoj kubeconfig (bez poziva update-kubeconfig) kao što je objašnjeno ranije, get-token ne generiše logove u Cloudtrail jer ne komunicira sa AWS API-jem (samo kreira token lokalno).
Dakle, kada attacker komunicira sa EKS cluster-om, cloudtrail neće zabeležiti ništa vezano za ukradenog korisnika i njegov pristup.
Imajte na umu da EKS cluster može imati uključene logove koji će zabeležiti ovaj pristup (iako su, po podrazumevanim, isključeni).
EKS Ransom?
Po podrazumevanju user or role that created klaster će ALWAYS going to have admin privileges nad klasterom. I to je jedini “siguran” pristup koji će AWS imati nad Kubernetes klasterom.
Dakle, if an attacker compromises a cluster using fargate and removes all the other admins and deletes the AWS user/role that created the Cluster, the attacker could have ransomed the cluster.
Tip
Imajte na umu da ako je klaster koristio EC2 VMs, moglo bi biti moguće dobiti Admin privileges sa Node i oporaviti klaster.
Zapravo, ako klaster koristi Fargate možete dodati EC2 node-ove ili preseliti sve na EC2 u okviru klastera i oporaviti ga pristupajući tokenima na node-u.
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

