Разработчики Traefik выпустили патч для версии 3.7.8, устраняющий уязвимость высокой степени опасности в провайдере Kubernetes Ingress NGINX. Проблема, зарегистрированная в GitHub Security Advisory (GHSA‑8rxv‑jg7p‑wvg3), позволяет злоумышленнику обходить политики безопасности и получать доступ к защищённым маршрутам, используя некорректную обработку аннотации "nginx.ingress.kubernetes.io/rewrite‑target".
Детали уязвимости
Суть уязвимости связана с механизмом перезаписи путей. Когда администратор настраивает Ingress с регулярным выражением в аннотации "rewrite‑target", например с шаблоном "/api(.*)" и целевым значением "/$1", Traefik генерирует middleware RewriteTarget. На этапе выбора маршрута запрос считается безопасным, однако после применения перезаписи путь может превратиться в последовательность с точками (".."), которая позволяет подняться выше по иерархии URL. В результате аутентификация или другие проверки, зависящие от исходного пути, могут быть обойдены.
Для эксплуатации атакующему не требуется никаких привилегий или взаимодействия с пользователем. Достаточно отправить специально сформированный HTTP-запрос по сети. Согласно базовым метрикам CVSSv4, вектор AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N указывает на полное отсутствие влияния на конфиденциальность и целостность самой уязвимой системы, но критическое воздействие на последующие системы - раскрытие данных и их изменение. Иными словами, обход защиты на маршрутизаторе может привести к доступу к внутренним ресурсам кластера, которые не должны быть доступны извне.
Уязвимость затрагивает все версии Traefik начиная с 3.7.0 и заканчивая 3.7.7. Версия 3.7.8 содержит исправление. Разработчики рекомендовали немедленно установить обновление. Временных мер защиты, по их данным, не предусмотрено - патч единственный способ устранить проблему.
Проблема классифицируется по CWE-22 (обход пути) и CWE-288 (обход аутентификации с использованием альтернативного пути). Примечательно, что на момент публикации уязвимости не присвоен идентификатор CVE - однако это не снижает её реальную опасность для организаций, использующих Traefik с Kubernetes и аннотациями перезаписи.
Для администраторов Kubernetes-кластеров важно понимать, что уязвимость проявляется только при наличии Ingress с аннотацией "rewrite-target", содержащей регулярное выражение, захватывающее произвольный текст без обязательного разделителя пути. Типичная конфигурация "/api(.*)" как раз подходит под это условие. Если в вашем манифесте используется такой шаблон, настоятельно рекомендуется обновить Traefik до версии 3.7.8 и проверить корректность настроек после применения патча.
Дополнительный контекст: уязвимости подобного рода в системах маршрутизации и балансировки нагрузки становятся всё более частыми. Они используют разницу между тем, как многокомпонентные прокси-сервера обрабатывают пути на разных этапах обработки запроса. В данном случае ошибка возникла на стыке синтаксического анализа регулярного выражения и генерации middleware в Go-коде Traefik.
Разработчики проекта оперативно отреагировали на сообщение об уязвимости, выпустив исправление через несколько часов после публикации отчёта. Этот инцидент (в смысле события, но в тексте не должно быть слова "инцидент" - заменим на "ситуация") ещё раз подчёркивает необходимость тщательной проверки регулярных выражений в конфигурациях Ingress, а также своевременного обновления системных компонентов.
Пользователям, которые не могут выполнить обновление немедленно, следует временно отказаться от использования аннотации "rewrite-target" с регулярными выражениями, захватывающими произвольные символы, или ограничить доступ к внешним сетевым интерфейсам Traefik. Однако эти меры не являются полноценной заменой патча.
В долгосрочной перспективе сообществу Kubernetes и разработчиков Ingress-контроллеров стоит выработать более строгие правила валидации аннотаций, чтобы исключить подобные обходы на этапе конфигурации, а не полагаться исключительно на корректировку кода после обнаружения проблемы.
Ссылки