Existem muitos tipos diferentes de vulnerabilidades de segurança encontrados em sites, um interessante é chamado de “Fixação de sessão”. A fixação de sessão é um problema em que um invasor pode influenciar o identificador de sessão, também conhecido como o id de sessão de um usuário, e então usá-lo para obter acesso à sua conta. Este tipo de vulnerabilidade pode funcionar de duas maneiras: ela pode permitir que o invasor encontre ou defina a id de sessão de outro usuário.
Como um ataque de fixação de sessão é executado
A id de sessão de um usuário é frequentemente uma parte fundamental da autenticação para o site e, em muitos casos, os únicos dados que identificam o usuário específico conectado. O problema com isso é que se um invasor pode definir ou aprender a id de sessão de outro usuário, eles podem usar o token de sessão e, então, atuar como o usuário.
Normalmente, isso é feito enganando o usuário, fazendo-o clicar em um tipo de link de phishing. O link em si é totalmente legítimo, mas inclui uma variável que define um id de sessão especificado. Se o usuário então efetuar login com o ID de sessão e o servidor não atribuir a ele um novo ID de sessão no login, o invasor pode simplesmente definir seu ID de sessão para ser o mesmo e ter acesso à conta da vítima.
Outra maneira de o invasor descobrir a id de sessão da vítima é se ela aparecer em uma URL. Por exemplo, se o invasor pode induzir a vítima a enviar um link e inclui o ID de sessão da vítima, o invasor pode usar o ID de sessão para acessar a conta da vítima. Em alguns casos, isso pode acontecer completamente por acidente. Por exemplo, se o usuário copiar o URL com o id da sessão e colá-lo em um amigo ou em um fórum, qualquer usuário que seguir o link será conectado com a conta do usuário.
Correções de fixação de sessão
Existem algumas soluções para esse problema e, como sempre, a melhor solução é implementar o máximo possível de correções como parte de uma estratégia de defesa em profundidade. A primeira solução é alterar a id de sessão do usuário quando ele entra. Isso evita que um invasor seja capaz de influenciar a id de sessão de um usuário logado. Você também pode configurar o servidor para aceitar apenas IDs de sessão que ele gerou e rejeitar explicitamente quaisquer IDs de sessão fornecidos pelo usuário.
O site deve ser configurado para nunca colocar detalhes confidenciais do usuário, como id de sessão no URL, e deve colocá-lo em um parâmetro de solicitação GET ou POST. Isso evita que o usuário comprometa acidentalmente seu próprio id de sessão. Usando um id de sessão e um token de autenticação separado, você dobra a quantidade de informações que o invasor precisa para obter e impede que eles acessem sessões com ids de sessão conhecidos.
É vital que todos os ids de sessão válidos para um usuário sejam invalidados quando o botão de logout for clicado. É possível regenerar o id de sessão em cada solicitação, se os ids de sessão anteriores forem invalidados, isso também impede que os invasores usem o id de sessão conhecido. Essa abordagem também reduz significativamente a janela de ameaça se um usuário revelar sua própria ID de sessão.
Ao habilitar várias dessas abordagens, uma estratégia de defesa em profundidade pode eliminar esse problema como um risco à segurança.