修复ASP.NET中的Session Fixation缺陷

jslywgbw  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(128)

一个使用.Net Framework 4.7的混合webforms/mvc asp.net应用程序在Veracode动态扫描中被标记为“Session Fixation”漏洞。这意味着Veracode获取登录页面,更改SessionId cookie,(ASP.NET_SessionId),然后使用有效的用户ID和密码进行登录。ASP.NET登录用户,但接受此更改的SessionId cookie并继续使用它;使用该注入的SessionId值的行为是缺陷。
换句话说,当Veracode获取页面时,SessionId cookie可能是“abc123”。Veracode将该cookie更改为“def 456”并回发。ASP.Net登录用户并从此使用“def 456”作为SessionId。
根据Veracode,我必须使成功登录之前创建的ASP.NET_SessionID cookie无效。当然,这很容易做到,当用户成功登录时,我可以简单地重置ASP.NET_SessionId cookie。问题是,这会导致用户被重定向回登录页面。所以发生的情况是:
1.用户提交登录页面。
1.在服务器端,如果登录成功,我会将ASP.NET_SessionId重置为某个新值(通过调用SessionIDManager.SaveSessionID(),这反过来会简单地重置ASP.NET_SessionID cookie)。
1.用户被重定向到应用程序主页,然后立即重定向回登录页
应用程序使用表单身份验证,并带有一个webforms登录页面。登录页面使用asp.net Login控件。在此控件的“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值被放弃。
    1.用户保持身份验证,而不是简单地重定向回登录页面。
    我尝试在各种页面事件(PreInit、Load等)中运行更改SessionId的代码,所有这些事件都有相同的结果--用户被重定向回登录页面。
    请不要将此问题标记为已回答。SO上有几个关于此问题的答案,所有这些答案都建议像我上面所做的那样重新设置SessionId cookie,并且所有这些答案都有评论指出这实际上不起作用。
yhxst69z

yhxst69z1#

经过相当多的来回从Veracode顾问的最后答复如下,基本上说“不用担心它”.这是从Veracode的答复:
我还进一步研究了应用程序的动态结果。我们发现会话固定的会话ID不是您用于身份验证的ID,因此,您的应用程序的风险很低。攻击者无法通过仅控制ASP.NET_SessionId cookie。通过保护.ssoIIMauth cookie,您的应用程序已经可以防止此类攻击。

相关问题