Anotações do Kubernetes permitem usar recursos de outro namespace
O provider Kubernetes Ingress do Traefik aceita referências a Middleware, ServersTransport e TLSOption de outros namespaces pelas anotações de Ingress e Service, sem validar a separação entre esses namespaces. Um atacante com permissão para criar ou alterar esses objetos no próprio namespace pode associar à sua rota um recurso de outro cliente, desde que conheça os nomes envolvidos. Isso pode expor um token acrescentado por um middleware Headers ou permitir que o Traefik use o certificado de cliente de um ServersTransport para acessar um serviço restrito. A opção allowCrossNamespace desativada no provider Kubernetes CRD não cobre esse caminho pelas anotações.
Casos de uso afetados
- Você administra um cluster compartilhado e permite que clientes criem Ingress ou Service nos próprios namespaces. Essa permissão permite inserir as referências afetadas mesmo sem acesso aos recursos do namespace de outro cliente.
- Uma aplicação recebe um token pelo middleware Headers. Ao reutilizar esse middleware numa rota para um backend sob seu controle, o atacante pode receber o cabeçalho com a credencial.
- Um serviço exige autenticação mútua por certificado e o Traefik usa um ServersTransport para se conectar a ele. A referência indevida permite reutilizar essa identidade para acessar o serviço, quando a conectividade necessária está disponível.
Confira na sua instância
Confira a versão em execução com traefik version no container do Traefik e compare o resultado com a faixa correspondente. Consulte os Ingress e Services com kubectl get ingress,service -A -o yaml. Nas anotações, examine router.middlewares, service.serverstransport e router.tls.options sob o prefixo traefik.ingress.kubernetes.io/. Compare o namespace de cada objeto com o namespace dos recursos referenciados por @kubernetescrd. Revise também as permissões de criação e alteração desses objetos concedidas aos clientes. Após atualizar, confira na configuração efetivamente carregada se crossProviderNamespaces permite referências entre providers somente a partir dos namespaces autorizados. A ausência dessa opção mantém todos os namespaces permitidos.
Versões afetadas e correções
| Linha | Afetadas | Corrigidas |
|---|---|---|
| github.com/traefik/traefik/v2 | <= v2.11.45 | v2.11.46 |
| github.com/traefik/traefik/v3 (3.0 a 3.6) | >= v3.0.0, <= v3.6.16 | v3.6.17 |
| github.com/traefik/traefik/v3 (3.7) | >= v3.7.0, <= v3.7.0 | v3.7.1 |
A correção está disponível nas releases [v2.11.46](https://github.com/traefik/traefik/releases/tag/v2.11.46), [v3.6.17](https://github.com/traefik/traefik/releases/tag/v3.6.17) e [v3.7.1](https://github.com/traefik/traefik/releases/tag/v3.7.1). Atualizar exige também definir crossProviderNamespaces para aplicar a restrição desejada. As políticas de rede podem impedir o acesso ao serviço no cenário com ServersTransport, mas o aviso demonstra que elas não evitam a exposição do token pelo middleware Headers. A pontuação 6,4 corresponde ao CVSS 4.0.
