ForwardAuth compartilha conexão autenticada com NTLM ou Negotiate entre clientes
O middleware ForwardAuth encaminha cada subconsulta de autenticação por um pool compartilhado por todos os clientes que usam o middleware. Quando o servidor de autenticação usa um esquema vinculado à conexão, como NTLM ou SPNEGO com Kerberos Negotiate em um IIS com autenticação do Windows, a conexão já autenticada por um usuário pode ser reaproveitada para a subconsulta de um cliente sem relação com ele. O cliente não autenticado recebe uma resposta de sucesso que carrega a identidade da vítima, e o Traefik repassa essa identidade ao backend pelos cabeçalhos configurados em authResponseHeaders. O acesso ao backend acontece com os privilégios da vítima, sem que o atacante apresente credencial. No Traefik 3.7, o mesmo caminho alcança as requisições de autenticação externa disparadas pela anotação auth-url do provedor Kubernetes Ingress NGINX.
Casos de uso afetados
- Você protege uma aplicação interna com ForwardAuth apontando para um servidor IIS que usa autenticação integrada do Windows. Um cliente em outra conexão de frontend pode receber a identidade de um usuário já autenticado e acessar áreas restritas com os privilégios dele.
- Você usa o provedor Kubernetes Ingress NGINX com a anotação auth-url e autenticação Negotiate no serviço externo. A subconsulta de autenticação pode herdar a identidade de outro usuário do mesmo serviço.
Confira na sua instância
Liste os middlewares ForwardAuth e confirme se o endereço de autenticação usa NTLM, Negotiate ou outro esquema vinculado à conexão. Confira a versão do Traefik instalada e a linha de manutenção em uso. No servidor de autenticação, examine o log de conexões reaproveitadas por usuários diferentes e a sequência de subconsultas atendidas em uma mesma conexão. Nos logs de acesso do Traefik, compare a identidade repassada em authResponseHeaders com a sessão que originou a requisição. Após atualizar para 2.11.60 ou 3.7.16, valide em ambiente de teste que cada conexão de frontend recebe um pool próprio para o servidor de autenticação.
Versões afetadas e correções
| Linha | Afetadas | Corrigidas |
|---|---|---|
| 2.x | <= v2.11.59 | v2.11.60 |
| 3.x | >= v3.0.0, <= v3.7.15 | v3.7.16 |
As versões 3.0 a 3.6 estão fora de manutenção e precisam de atualização para 3.7.16. A correção aplica ao servidor de autenticação o mesmo isolamento por conexão de frontend já usado no proxy de backend. Quando a atualização não for possível, limite o uso do ForwardAuth a servidores que autenticam por cabeçalho ou token sem vínculo com a conexão.
