Qu’est qu’une attaque « Session Fixation » ?

Description

Cette attaque vise à usurper l’identité d’un utilisateur connecté, en lui imposant un ID de session. Pourquoi ?

  • si vous connaissez le PHPSESSID d’un utilisateur, vous pouvez l’utiliser et récupérer sa session comme si c’était la vôtre : http://www.example.com/?PHPSESSID=IDQUEJECONNAIS

Bon, entrons dans les détails en prenant un example, le plus « flagrant » étant un site de banque :

  • Alain se connecte au site http://changezdebanque.com pour consulter se compte
  • Lafouine, pirate mal intentionné a étudié la sécurité du site http://changezdebanque.com et sait qu’il est facile de fixer la session en ajouter « ?PHPSESSID=unid »
  • Lafouine envoie un mail à Alain lui disant : « Votre banque vous propose un nouveau service que nous vous invitons à découvrir en vous connecter sur http://changezdebanque.com?PHPSESSID=IDQUEJECONNAIS » (c’est l’invitation « courante », la plus simple, mais ça peut être d’autres types d’invitation : par un forum ou autre, selon le type de site)
  • Alain, bonne poire, clique gentiment sur le lien, le site l’invite à se connecter et le voilà connecté, avec un ID de session IDQUEJECONNAIS
  • Lafouine qui guète la connexion d’Alain parvient à se connecter au site avec IDQUEJECONNAIS et dispose ainsi de l’authentification d’Alain sans avoir à se connecter, puisqu’il a récupérer sa session. Je vous laisse imaginer la suite !

Solutions pour parer à cette attaque

La solution la plus simple est de regénérer l’id de session à l’authentification de l’utilisateur, comme ça même si à l’accès au site http://changezdebanque.com, Alain avait bien l’IDQUEJECONNAIS, au moment de s’authentifier, cet ID changera et Lafouine ne pourra pas faire grand chose.

D’autres solutions existent, comme ne pas accepter d’identifiant de session autre que provenant du serveur, etc.

Je n’ai rien inventé dans cet article, vous l’imaginez bien, et je vous invite à compléter vos connaissances sur Wikipédia.