
Формирование raw TCP/IP-пакетов для отправки на плохо сконфигурированные серверы Kubernetes - CVE-2020-8558 PoC
Репозиторий, содержащий Python-скрипт для создания «сырых» TCP/IP-пакетов.
Используется для проверки марсианских пакетов в связи с уязвимостью, о которой было объявлено в Kubernetes (kube-proxy: CVE-2020-8558). Этот PoC покрывает обход границы localhost на участке pod -> node (host).
Простой и надёжный PoC для части уязвимости node -> node см. здесь.
Использованные материалы по созданию пакетов:
https://inc0x0.com/tcp-ip-packets-introduction/tcp-ip-packets-3-manually-create-and-send-raw-tcp-ip-packets/
https://gist.github.com/NickKaramoff/b06520e3cb458ac7264cab1c51fa33d6
В репозитории есть Dockerfile и манифест пода для развёртывания эксплойта в Kubernetes, позволяющие легко проверить, уязвим ли кластер. Скрипт был обновлён для нацеливания на неаутентифицированный API-сервер kube на порту 8080, который работает на мастер-узлах (манифест развернёт под на мастер-узле).
Эксплойт использует REST API kube-apiserver, чтобы создать в пространстве имён по умолчанию вашего кластера под с именем: youve-been-pwned. Этот под просто бесконечно выводит текст, и его нужно будет удалить вручную.
У меня возникали проблемы на некоторых кластерах (с Cilium) при немедленном запуске процесса при создании контейнера: после отправки начального SYN от хоста не приходил SYN/ACK. Я обошёл это с помощью скрипта start.sh, который просто проверяет, что сеть поднята, перед запуском эксплойта — это, похоже, помогло.