Duas falhas atingem o isolamento entre namespaces em provedores do Kubernetes, pelo provedor CRD e pelo Gateway API. A terceira alcança o middleware BasicAuth e permite assumir um nome de usuário não configurado quando o atacante já tem uma credencial válida e o hash armazenado. As correções estão em 2.11.54, 3.6.25 e 3.7.10.
Aplicativo
Traefik
Data do compilado
Vulnerabilidades
3
A falha de BasicAuth exige uma credencial válida e a leitura do hash armazenado, por isso recebeu classificação baixa. As falhas de Kubernetes afetam apenas instalações com os provedores CRD e Gateway API ativados. As linhas 3.0 a 3.6 estão fora de manutenção e recebem correção apenas em 3.6.25. A indicação de correção descreve as versões do projeto e não confirma a atualização da sua instância.
Gravidade altaCorreção disponível
Identidades de rota do Gateway API colidem e desviam tráfego de outro namespace
O provedor Kubernetes Gateway API monta a identidade de rotas HTTPRoute, GRPCRoute, TCPRoute e TLSRoute juntando com hífens o namespace, o nome da rota, a identidade do Gateway, o entrypoint e o índice da rota. Como nomes do Kubernetes podem conter hífens, a montagem não distingue os campos: as rotas team/a-app e team-a/app, no mesmo Gateway e com a mesma condição, produzem a mesma chave. Na mesclagem da configuração, a rota carregada depois substitui a anterior sem aviso. Um locatário que consiga criar uma rota aceita com nome e namespace que colidam pode desviar o tráfego de outro namespace para um backend que controla, recebenda requisiçãos, credenciais e cabeçalhos de autorização destinados à vítima.
Casos de uso afetados
Você compartilha um Gateway entre locatários e permite que cada uma crie as próprias rotas. Um nome de rota e namespace que produzam a mesma chave de outro locatário desviam o tráfego para o backend do atacante.
Você usa hostnames e caminhos iguais em rotas de namespaces diferentes. A segunda rota substitui a primeira na configuração e atende as requisições da vítima.
Confira na sua instância
Liste as rotas aceitas pelo Gateway compartilhado e compare pares de namespace e nome que possam gerar a mesma sequência com hífens. Confira no log e na configuração do provedor se duas rotas usam a mesma chave. Em ambiente de teste, crie duas rotas com nomes equivalentes e confirme qual backend atende o host. Depois de atualizar para 3.6.25 ou 3.7.10, repita o teste e confirme que as duas rotas permanecem distintas.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
3.0 a 3.6
>= v3.0.0, <= v3.6.24
v3.6.25
3.7.x
>= v3.7.0, <= v3.7.9
v3.7.10
Todas as linhas menores do Traefik 3 são afetadas. As linhas anteriores à 3.6 estão fora de manutenção e precisam de atualização para uma versão corrigida. A exploração depende de uma combinação de nomes que colida e de um Gateway compartilhado que aceite a rota.
Gravidade moderadaCorreção disponível
Referência a TraefikService de outro namespace fura o allowCrossNamespace desativado
Com providers.kubernetesCRD.allowCrossNamespace desativado, que é o padrão, o Traefik recusa referências entre namespaces para middlewares, opções TLS e ServersTransport, mas não aplicava a mesma restrição às referências de backend do tipo TraefikService. A checagem do resolvedor de serviços só acontecia em nomes sem @, e a lista crossProviderNamespaces aceita tudo quando está vazia. Um locatário limitado pelo RBAC ao próprio namespace pode apontar a própria rota para um TraefikService de outro namespace usando o formato namespace-nome@kubernetescrd. A rota do atacante encaminha para os pods da vítima com o próprio host e entrypoint, expondo um serviço interno e desviando tráfego.
Casos de uso afetados
Você opera um cluster multi-inquilino com allowCrossNamespace desativado e RBAC por namespace. Um locatário pode referenciar um TraefikService de outro namespace e publicar o backend alheio sob o próprio host.
Você mantém serviços internos sem exposição externa e usa a separação por namespace. Uma rota criada em outro namespace pode redirecionar ou espelhar tráfego para esse backend.
Confira na sua instância
Confira o valor de providers.kubernetesCRD.allowCrossNamespace e de crossProviderNamespaces. Procure IngressRoutes e TraefikServices cujo campo service use o formato nome@kubernetescrd. Cruze o namespace da rota com o namespace do serviço referenciado. Em ambiente de teste, crie uma rota em um namespace que referencie um TraefikService de outro e confirme, depois de atualizar para 2.11.54, 3.6.25 ou 3.7.10, que a referência é recusada.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
2.x
<= v2.11.53
v2.11.54
3.0 a 3.6
>= v3.0.0, <= v3.6.24
v3.6.25
3.7.x
>= v3.7.0, <= v3.7.9
v3.7.10
Outros resolvedores do provedor CRD já aplicavam a recusa de referências entre namespaces; o resolvedor de TraefikService era o único sem a checagem. O atacante precisa apenas de RBAC no próprio namespace e do nome do TraefikService de destino.
Gravidade baixaCorreção disponível
Colisão no singleflight do BasicAuth permite assumir usuário não configurado
O middleware BasicAuth agrupa verificações simultâneas de senha em um singleflight cuja chave era a concatenação sem separador da senha enviada com o segredo armazenado. Para um usuário configurado com senha P e hash H, a chave é P seguido de H. Um usuário não configurado que envie P seguido de H tem segredo vazio e produz a mesma chave. Quando a requisição do usuário válido inicia o cálculo, a requisição do usuário desconhecido recebe o resultado de sucesso e o Traefik segue com o nome de usuário escolhido pelo atacante em URL.User, no log de acesso e no cabeçalho configurado em headerField. Um backend que confia nesse cabeçalho como identidade autenticada atende o usuário forjado.
Casos de uso afetados
Você usa BasicAuth com headerField para repassar a identidade ao backend e mantém uma credencial de baixo privilégio distribuída. Um usuário com essa credencial e o hash pode assumir um nome não configurado, como admin, durante requisições simultâneas.
Você expõe o hash em rótulos de implantação ou na API do Traefik. Um atacante que alcança esse valor e tem uma credencial válida consegue forjar a identidade repassada ao backend.
Confira na sua instância
Confira a versão do Traefik e se o middleware BasicAuth usa headerField. Restrinja o acesso à API do Traefik e aos segredos que guardam os hashes. Procure no log de acesso nomes de usuário que não constam na lista de usuários configurados. Depois de atualizar para 3.6.25 ou 3.7.10, execute em ambiente de teste duas requisições simultâneas com uma credencial válida e um usuário inexistente e confirme que o segundo recebe 401.
Versões afetadas e correções
Faixas declaradas no comunicado oficial, por linha de manutenção
Linha
Afetadas
Corrigidas
3.6.x
>= v3.6.11, <= v3.6.24
v3.6.25
3.7.x
>= v3.7.0, <= v3.7.9
v3.7.10
A falha exige uma credencial válida e o hash armazenado, alcançável pela API do Traefik, por leitura do segredo no Kubernetes ou pelo socket do Docker. A linha 2 e versões 3 anteriores à 3.6.11 não têm o caminho de deduplicação afetado.
Programador há mais de 20 anos, fundador da Powertic e da Promovaweb. Embaixador do n8n no Brasil e da Baserow, Chatwoot, Miro e Kestra. Membro do Product Team do Mautic.
Canais oficiais
Nossos Links
Encontre a Promovaweb no canal que combina com o seu próximo passo.