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

时间:2018-07-31 19:26:08

标签: asp.net session cookies veracode session-fixation

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

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

每个Veracode我必须使成功登录之前创建的ASP.Net_SessionID cookie无效。当然这很容易做到,我可以在用户成功登录后简单地重置ASP.NET_SessionId cookie。问题是,这导致用户被直接重定向回登录页面。那么会发生什么:

  1. 用户提交登录页面。
  2. 在服务器端,如果登录成功,我将ASP.NET_SessionId重置为某个新值(通过调用SessionIDManager.SaveSessionID(),这又会简单地重置ASP.Net_SessionID cookie)。
  3. 用户被重定向到应用程序主页,然后立即被重定向回到登录页面

应用程序使用带有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

  1. Veracode注入的SessionId cookie值被放弃。
  2. 用户保持身份验证,并且不会简单地重定向回登录页面。

我试图运行在各种页面事件(PreInit,Load等)中更改SessionId的代码,并且所有这些都具有相同的结果-用户被重定向回登录页面。

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

1 个答案:

答案 0 :(得分:0)

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

  

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