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。

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

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

该应用程序使用表单身份验证和 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 值被放弃。
  2. 用户保持身份验证,而不是简单地重定向回登录页面。

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

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

4

1 回答 1

0

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

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

于 2018-08-09T12:49:00.947 回答