Traefik — это обратный прокси-сервер HTTP и балансировщик нагрузки. В версиях >= v3.7.0 и <= v3.7.11 поставщик Kubernetes ingress-nginx неправильно обрабатывает входные данные, которые содержат как аннотацию аутентификации, так и аннотацию nginx.ingress.kubernetes.io/from-to-www-redirect. Для таких входов провайдер создает дополнительный «родственный» маршрутизатор, который соответствует только узлу, несет только промежуточное программное обеспечение RedirectRegex и по-прежнему указывает на защищенную внутреннюю службу родительского маршрутизатора.
Поскольку RedirectRegex не является обработчиком терминала, запрос, который не соответствует его шаблону, пересылается на серверную часть, а шаблон перенаправления принимает только числовой порт, в то время как средство сопоставления хостов Traefik канонизирует полномочия через net.SplitHostPort, запрос с нечисловым или пустым портом (например, «Хост: www.example.com:x») выбирает родственный маршрутизатор, пропускает перенаправление и пересылается на защищенный серверная часть, к которой не применяется ни одно из промежуточных программ Ingress, основанных на аннотациях. При этом отменяется не только аутентификация (например, BasicAuth), но и все промежуточное программное обеспечение, полученное из аннотаций, включая список разрешенных IP-адресов источника. Выпуски Traefik v2 и v3 до версии 3.7.0 не затрагиваются.
Проблема исправлена в версии 3.7.12.
Показать оригинальное описание (EN)
Traefik is a HTTP reverse proxy and load balancer. In versions >= v3.7.0 and <= v3.7.11, the Kubernetes ingress-nginx provider mishandles Ingresses that carry both an authentication annotation and the nginx.ingress.kubernetes.io/from-to-www-redirect annotation. For such Ingresses the provider creates an additional 'sibling' router that matches on the host alone, carries only the RedirectRegex middleware, and still points at the parent router's protected backend service. Because RedirectRegex is not a terminal handler, a request its pattern does not match is forwarded to the backend, and because the redirect pattern only accepts a numeric port while Traefik's host matcher canonicalizes the authority via net.SplitHostPort, a request with a non-numeric or empty port (for example 'Host: www.example.com:x') selects the sibling router, misses the redirect, and is proxied to the protected backend with none of the Ingress's annotation-derived middlewares applied. This discards not only authentication (e.g. BasicAuth) but every annotation-derived middleware, including source-IP allowlisting. Traefik v2 and v3 releases before v3.7.0 are not affected. The issue is fixed in v3.7.12.
Характеристики атаки
Последствия
Строка CVSS v4.0