首页 文章

修复ASP.Net中的会话修复缺陷

提问于
浏览
0

使用.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”作为SessionId .

Per Veracode我必须使成功登录前创建的ASP.Net_SessionID 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的代码,并且所有这些代码都具有相同的结果 - 用户被重定向回登录页面 .

请不要将此问题标记为已经回答 . 这个问题在SO上有几个答案,所有这些都建议像我上面那样重新设置SessionId cookie,所有这些都有评论指出这实际上不起作用 .

1 回答

  • 0

    经过相当反复的回应,Veracode顾问的最终答复如下,基本上是说“不要担心” . 这是Veracode的回复:

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

相关问题