Vulnerabilidade 'Session Fixation' - Como tratar?

Bom dia!!!

Pessoal, alguém poderia me ajudar a tratar “Session fixation”.

Desde já agradeço.

O que é isso?

Vou tentar te explicar:
Session Fixation => quando um hacker invade uma máquina e fixa um session id na aplicação, antes que o mesma seja autenticada no servidor.

Não dá pra fazer session fixation em servidores Java, o sessionid não é recebido em lugar nenhum pela aplicação, ele é criado pelo próprio servidor.

Session fixation substituiu XSS como o grande bicho-papão do momento. O ataque básico é simples, uma variação dos ataques man-in-the-middle:

  1. O agressor inicia uma sessão no servidor-alvo e obtém um jsessionid válido

  2. (a parte complicada) O agressor faz com que o usuário-alvo use o session id que ele criou. Ele pode fazer isso por exemplo setando um cookie ou reescrevendo links.

  3. O usuário desavisado loga no servidor. A partir daí, o agressor pode usar esse session id para se passar pelo usuário.

[EDIT] Ou você pode seguir o link do thingol, que explica bem melhor. :slight_smile:

Para previnir isso, você pode destruir a sessão e criar uma nova. Algo assim deve ser o suficiente:

if(validaUsuario(usuario, senha)){ // depois de verificar usuário/senha, recria a session do zero HttpSession session = request.getSession(); session.invalidate(); session = request.getSession(); // seta valores na nova session indicando que o usuário logou com sucesso session.setAttribute("usuario", usuario); }

[EDIT 2] Por que isso funciona: Na chamada session.invalidate(), a sessão é destruída e o jsessionid usado se torna inválido. No segundo getSession, uma nova sessão (com um novo jsessionid) será criada. Se você estiver usando HTTPS, não há como interceptar esse novo ID.