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 може публічно відкривати сервіси, щоб знайти їх:
Exposing Services in KubernetesНаступні порти можуть бути відкритими в кластері Kubernetes:
Port | Process | Description |
---|---|---|
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, що слухає |
Це API Kubernetes сервіс, з яким зазвичай спілкуються адміністратори, використовуючи інструмент kubectl
.
Звичайні порти: 6443 та 443, але також 8443 у minikube та 8080 як незахищений.
Перевірте наступну сторінку, щоб дізнатися, як отримати чутливі дані та виконати чутливі дії, спілкуючись з цим сервісом:
Kubernetes EnumerationЦей сервіс запускається на кожному вузлі кластера. Це сервіс, який контролює поди всередині вузла. Він спілкується з 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, перегляньте цю сторінку:
Kubelet Authentication & AuthorizationAPI сервісу 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)