修复ASP.Net中的会话固定漏洞

修复ASP.Net中的会话固定漏洞,asp.net,session,cookies,veracode,session-fixation,Asp.net,Session,Cookies,Veracode,Session Fixation,使用.net Framework 4.7的混合webforms/mvc asp.net应用程序在Veracode动态扫描中被标记为“会话固定”漏洞。这意味着Veracode获取登录页面,更改SessionId cookie(ASP.NET_SessionId),然后使用有效的用户ID和密码进行登录。ASP.Net登录用户,但接受此修改后的SessionId cookie并继续使用它;使用注入的SessionId值的行为就是缺陷 换句话说,当Veracode获取页面时,SessionId cook

使用.net Framework 4.7的混合webforms/mvc asp.net应用程序在Veracode动态扫描中被标记为“会话固定”漏洞。这意味着Veracode获取登录页面,更改SessionId cookie(ASP.NET_SessionId),然后使用有效的用户ID和密码进行登录。ASP.Net登录用户,但接受此修改后的SessionId cookie并继续使用它;使用注入的SessionId值的行为就是缺陷

换句话说,当Veracode获取页面时,SessionId cookie可能是“abc123”。Veracode将cookie更改为“def456”并发回。ASP.Net登录用户并使用“def456”作为会话ID

根据Veracode,我必须使成功登录之前创建的ASP.Net_会话ID cookie无效。当然,这很容易做到,当用户成功登录时,我可以简单地重置ASP.NET_SessionId cookie。问题是,这会导致用户被重定向回登录页面。那么发生的情况是:

  • 用户提交登录页面
  • 在服务器端,如果登录成功,我会将ASP.NET_SessionId重置为某个新值(通过调用SessionIDManager.SaveSessionID(),这反过来只会重置ASP.NET_SessionId cookie)
  • 用户被重定向到应用程序主页,然后立即重定向回登录页面
  • 应用程序使用表单身份验证和webforms登录页面。登录页面使用asp.net登录控件。在该控件的“OnAuthenticate”事件中,我有如下代码:

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            bool b = Membership.Validateuser(Login1.UserName, Login1.Password);
            if(b)
            {
                e.Authenticated = true;
                SessionIDManager mgr = new SessionIDManager();
                string newId = mgr.CreateSessionID(Context);
                mgr.SaveSessionID(Context, newId, out bool redirected, out bool cookieAdded);
            }
    }
    
    这运行没有错误。ASP.net将用户重定向到应用程序主页。但是asp.net会立即将用户从应用程序主页重定向回登录页面

    有没有办法改变SessionId cookie以便

  • Veracode的注入SessionId cookie值被放弃
  • 用户保持身份验证,而不是简单地重定向回登录页面
  • 我尝试运行在各种页面事件(PreInit、Load等)中更改SessionId的代码,所有这些事件都有相同的结果——用户被重定向回登录页面


    请不要将此问题标记为已回答。关于这个问题有几个答案,所有的答案都建议像我上面所做的那样重新设置SessionId cookie,并且所有的答案都有评论指出这实际上不起作用。

    经过大量的反复之后,Veracode顾问的最终答复如下,基本上说“不用担心。”以下是Veracode的回复:

    我还进一步研究了应用程序的动态结果。我们发现会话固定的会话ID不是用于身份验证的ID,因此应用程序的风险很低。攻击者将无法通过仅控制ASP.NET_SessionId cookie来访问用户经过身份验证的会话。通过保护.ssoIIMAuth cookie,您的应用程序已经可以防止此类攻击


    这是一本很有趣的书。WhiteHat security也有类似的问题,告诉我站点容易受到会话固定攻击,我和你一样,尝试了几种方法来重新生成会话ID。在调试时,似乎原始会话被搁置一旁,并创建了一个新会话,在所有记录用户日志的代码被执行之后,基本上创建了一个新的会话。由于这个新用户会话没有登录,我也会被直接发送回登录页面。