
Доказательство концепции, демонстрирующее обход авторизации в провайдере Kubernetes Gateway Traefik (CVE-2026-54761) через уязвимость crossProviderNamespaces, раскрывая внутренние службы, такие как api@internal.
Этот репозиторий представляет собой Proof of Concept (PoC) для воспроизведения уязвимости высокой степени серьезности CVE-2026-54761, присутствующей в Kubernetes Gateway provider Traefik, в локальной среде.
Эта уязвимость влияет на белый список crossProviderNamespaces. В правиле HTTPRoute, объявляющем несколько взвешенных ссылок на бэкенды, Traefik проверяет белый список для backendRef.namespace целевого бэкенда, а не для пространства имен самого Route. В результате даже HTTPRoute, находящийся в неразрешенном пространстве имен, может раскрыть внутренние сервисы Traefik, такие как api@internal, если ссылка на бэкенд указывает на разрешенное пространство имен и существует соответствующий ReferenceGrant Gateway API.
Авторы: saku0512 (https://github.com/Saku0512), vvvvvvvvvvel (https://github.com/vvvvvvvvvvel)
Этот проект предназначен исключительно для образовательных целей и разрешенного тестирования безопасности.
Не запускайте этот PoC на системах, которые вам не принадлежат или которыми вы не управляете. Этот PoC создает одноразовый локальный кластер kind и демонстрирует проблему в изолированной среде.
api@internal, могут быть раскрыты через обычную плоскость данных.Опция crossProviderNamespaces предназначена для ограничения пространств имен Gateway API Routes, которые могут объявлять ссылки на внешние сервисы TraefikService, содержащие ссылки на сервисы @internal.
В уязвимом пути обработки взвешенных бэкендов Traefik проверяет белый список для backendRef.namespace. Однако эта проверка ошибочна, так как граница безопасности — это пространство имен HTTPRoute, объявляющего ссылку.
Ожидаемое поведение:
providers:
kubernetesGateway:
crossProviderNamespaces:
- trusted
Только Route, чье собственное пространство имен — trusted, должны иметь возможность объявлять внешние ссылки на TraefikService.
Уязвимое поведение:
backendRefs:
- group: traefik.io
kind: TraefikService
name: api@internal
namespace: trusted
Если Route имеет несколько ссылок на бэкенды, и backendRef.namespace установлен в разрешенное пространство имен trusted, то HTTPRoute в пространстве имен attacker может быть принята.
Этот PoC создает одноразовый локальный кластер kind со следующей конфигурацией.
providers.kubernetesGateway.crossProviderNamespaces=trustedReferenceGrant из trustedcd external-repro-kind
./run-kind-repro.sh
Скрипт автоматически удалит кластер после завершения.
Чтобы оставить кластер для ручного исследования:
KEEP_CLUSTER=1 ./run-kind-repro.sh
Контрольный Route использует одну запрещенную ссылку на api@internal из пространства имен attacker. В этом случае API не должен быть раскрыт.
control status: 404
Exploit Route использует две ссылки на бэкенды, заставляя Traefik построить взвешенный сервис. В уязвимой версии запрос к /api/http/services возвращает JSON Traefik API.
exploit returned Traefik API JSON
api@internal status: enabled
weighted members:
api@internal 1000000
attacker-whoami-http-80 1
Важно, что оба Route созданы в одном и том же ненадежном пространстве имен attacker. Контрольный Route с одним бэкендом отклоняется, но смешанный взвешенный бэкенд Route успешно разрешается и раскрывает api@internal.
external-repro-kind/kind-config.yaml - Конфигурация локального кластера kind, публикующего Traefik на 127.0.0.1:18080external-repro-kind/traefik-v371.yaml - Деплоймент уязвимого Traefik и GatewayClassexternal-repro-kind/gateway-exploit.yaml - Namespace, Gateway, ReferenceGrant, контрольный Route, Route для обходаexternal-repro-kind/run-kind-repro.sh - Скрипт для локального сквозного воспроизведенияОбновите Traefik до исправленной версии.
Администраторам также следует проверить существующие ресурсы Gateway API ReferenceGrant. Не разрешайте доступ к внешним ссылкам TraefikService из ненадежных пространств имен, если это не является явно преднамеренным делегированием.