Уязвимости в ingress-nginx, позволяющие скомпрометировать кластеры Kubernetes

В развиваемом проектом Kubernetes ingress-контроллере ingress-nginx выявлены три уязвимости, позволяющие в конфигурации по умолчанию получить доступ к настройкам объекта Ingress, в которых, среди прочего, хранятся и учётные данные для обращения к серверам Kubernetes, позволяющие получить привилегированный доступ к кластеру. Проблемы проявляются только в ingress-контроллере ingress-nginx от проекта Kubernetes и не затрагивает контроллер kubernetes-ingress, развиваемый разработчиками NGINX.

Ingress-контроллер выступает в роли шлюза и используется в Kubernetes для организации доступа из внешней сети к сервисам внутри кластера. Контроллер ingress-nginx является наиболее популярным и применяет сервер NGINX для организации проброса обращений к кластеру, маршрутизации внешних запросов и балансировки нагрузки. Проект Kubernetes предоставляет базовые ingress-контроллеры для AWS, GCE и nginx, последний из которых никак не связан с контроллером kubernetes-ingress, сопровождением которого занимается компания F5/NGINX.


Уязвимости CVE-2023-5043 и CVE-2023-5044 позволяют выполнить свой код на сервере с правами процесса ingress-контроллера, используя для его подстановки параметры “nginx.ingress.kubernetes.io/configuration-snippet” и “nginx.ingress.kubernetes.io/permanent-redirect”. Среди прочего, полученные права доступа позволяют извлечь токен, применяемый для аутентификации на уровне управления кластером. Уязвимость CVE-2022-4886 позволяет обойти проверку файловых путей, используя директиву log_format.

Первые две уязвимости проявляются только в выпусках ingress-nginx до версии 1.9.0, а последняя – до версии 1.8.0. Для осуществления атаки злоумышленник должен иметь доступ к конфигурации ingress-объекта, например, в многопользовательских кластерах Kubernetes, пользователям в которых предоставляется возможность создания объектов в своём пространстве имён.

Release. Ссылка here.