使用.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。问题是,这导致用户被直接重定向回登录页面。那么会发生什么:
应用程序使用带有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
我试图运行在各种页面事件(PreInit,Load等)中更改SessionId的代码,并且所有这些都具有相同的结果-用户被重定向回登录页面。
请不要将此问题标记为已回答。关于SO的此问题有多个答案,所有这些建议都像我上面一样建议重新设置SessionId cookie,并且所有这些注释都指出这实际上不起作用。
答案 0 :(得分:0)
经过反复反复的反复,Veracode顾问的最终答复如下,基本上是说“不用担心”。这是Veracode的回复:
我还进一步研究了您的应用程序中的动态发现。我们正在查找会话固定的会话ID不是用于身份验证的ID,因此应用程序的风险较低。攻击者将无法通过仅控制ASP.NET_SessionId cookie来访问用户的身份验证会话。通过保护.ssoIIMAuth cookie,您的应用程序已经在防止这种攻击。