Pentesting Kubernetes Services
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)
Kubernetes використовує кілька специфічних мережевих сервісів, які ви можете знайти відкритими в Інтернеті або в внутрішній мережі, як тільки ви зможете зламати один под.
Один із способів може полягати в пошуку Identity LIKE "k8s.%.com"
на crt.sh, щоб знайти піддомени, пов'язані з kubernetes. Інший спосіб може бути пошук "k8s.%.com"
в github і пошук YAML файлів, що містять рядок.
Може бути корисно для вас зрозуміти, як Kubernetes може публічно відкривати сервіси, щоб знайти їх:
Наступні порти можуть бути відкритими в кластері Kubernetes:
Port | Process | Description |
---|---|---|
Це API Kubernetes сервіс, з яким зазвичай спілкуються адміністратори, використовуючи інструмент kubectl
.
Звичайні порти: 6443 та 443, але також 8443 у minikube та 8080 як незахищений.
Перевірте наступну сторінку, щоб дізнатися, як отримати чутливі дані та виконати чутливі дії, спілкуючись з цим сервісом:
Цей сервіс запускається на кожному вузлі кластера. Це сервіс, який контролює поди всередині вузла. Він спілкується з kube-apiserver.
Якщо ви знайдете цей сервіс відкритим, ви, можливо, виявили неаутентифіковане RCE.
Якщо відповідь Unauthorized
, це означає, що потрібна аутентифікація.
Якщо ви можете перерахувати вузли, ви можете отримати список кінцевих точок kubelets за допомогою:
Ви можете зловживати цим сервісом для ескалації привілеїв всередині Kubernetes:
Сервіс, корисний для збору метрик.
Коли порт відкритий на всіх вузлах через NodePort, той самий порт відкритий на всіх вузлах, проксуючи трафік у оголошений Service. За замовчуванням цей порт буде в діапазоні 30000-32767. Тому нові неперевірені сервіси можуть бути доступні через ці порти.
Анонімний доступ до kube-apiserver API кінцевих точок не дозволений. Але ви можете перевірити деякі кінцеві точки:
ETCD зберігає секрети кластера, конфігураційні файли та інші чутливі дані. За замовчуванням ETCD не може бути доступний анонімно, але завжди корисно перевірити.
Якщо ETCD може бути доступний анонімно, вам може знадобитися використати etcdctl інструмент. Наступна команда отримає всі збережені ключі:
Документація Kubelet пояснює, що за замовчуванням анонімний доступ до сервісу дозволено:
Дозволяє анонімні запити до сервера Kubelet. Запити, які не відхилені іншим методом аутентифікації, розглядаються як анонімні запити. Анонімні запити мають ім'я користувача
system:anonymous
та ім'я групиsystem:unauthenticated
Щоб краще зрозуміти, як працює аутентифікація та авторизація API Kubelet, перегляньте цю сторінку:
API сервісу Kubelet не документовано, але вихідний код можна знайти тут, і знайти відкриті кінцеві точки так само просто, як виконати:
Усі вони звучать цікаво.
Ви можете використовувати інструмент Kubeletctl для взаємодії з Kubelet та їхніми кінцевими точками.
Ця кінцева точка перераховує поди та їхні контейнери:
Цей кінцевий пункт дозволяє дуже легко виконувати код всередині будь-якого контейнера:
Щоб уникнути цієї атаки, служба kubelet повинна працювати з параметром --anonymous-auth false
, а служба повинна бути сегрегована на мережевому рівні.
Коли порт kubelet тільки для читання відкритий, стає можливим отримання інформації з API несанкціонованими особами. Витік цього порту може призвести до розкриття різних елементів конфігурації кластера. Хоча інформація, включаючи імена подів, розташування внутрішніх файлів та інші конфігурації, може не бути критично важливою, її витік все ще становить загрозу безпеці і повинен бути уникнутий.
Приклад того, як цю вразливість можна експлуатувати, включає віддаленого зловмисника, який отримує доступ до конкретного URL. Перейшовши за адресою http://<external-IP>:10255/pods
, зловмисник може потенційно отримати чутливу інформацію з kubelet:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
443/TCP
kube-apiserver
Порт API Kubernetes
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Метрики контейнерів
6443/TCP
kube-apiserver
Порт API Kubernetes
8443/TCP
kube-apiserver
Порт API Minikube
8080/TCP
kube-apiserver
Небезпечний порт API
10250/TCP
kubelet
HTTPS API, який дозволяє повний доступ
10255/TCP
kubelet
Неавтентифікований порт HTTP тільки для читання: поди, запущені поди та стан вузла
10256/TCP
kube-proxy
Сервер перевірки стану Kube Proxy
9099/TCP
calico-felix
Сервер перевірки стану для Calico
6782-4/TCP
weave
Метрики та кінцеві точки
30000-32767/TCP
NodePort
Проксі для сервісів
44134/TCP
Tiller
Служба Helm, що слухає