1.先说会话标识固定是什么以及危害性
这个漏洞是指在用户进入登录页面,但还未登录时,即产生了一个 session,用户登录后,session 的id 未改变。即系统在登录后没有建立新 session,原来的 session 也没有被销毁。攻击者事先访问系统并建立一个会话,诱使受害者使用此会话登录系统,然后攻击者再使用该会话访问系统即可登录受害者的账户。也就是说登录前和登录后共用的是一个session ID,即使对方没有你的账号密码,但只要提前登录并获取一个session ID,再让拥有账号密码的用户去使用这个已经产生了session ID的登录页,那么就相当于间接的有了登录权限,访问你的系统。
2.漏洞修复背景
所修复的漏洞,涉及的是ssm中shiro框架的登录生成的session id问题,在漏洞修复前,可以观察下自己系统登录的session id信息。
因servelet容器分配的session名为JSESSIONID,若不指定shiro本身的session ID,可能带来的问题有:与SERVLET容器名冲突, 如JETTY, TOMCAT 等默认JSESSIONID,当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重新分配值导致登录会话丢失!
故而本系统shiro生成的session 叫做MASSESSIONID,防止和servelet的冲突。
本系统在修复前,登录时shiro产生的 session id 在登录前和登录后值是固定不变的,也就是会话标识固定。
3.修复
系统使用shiro框架的,一般都会继承shiro中的FormAuthenticationFilter类,重写里面的一些方法,进行登录前后的一些信息验证或者过滤,该修复手段即重写shiro生成session的方法,将固定session改为动态session。
@Component
public class FormAuthFilter extends FormAuthenticationFilter {
@Override
protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
AuthenticationToken token = createToken