如果我的 anti-CSRF 令牌受到 XSS 攻击会怎样?

信息安全 xss javascript 饼干 csrf jwt
2021-08-25 06:15:29

有趣的 Stack Overflow 问题“Cookie 是否保护令牌免受 XSS 攻击?” 由于过于宽泛而被关闭,但正如评论中提到的那样,有一个切实的问题是“如果我的反 CSRF 令牌受到 XSS 攻击的损害会发生什么?”;在我看来,这个问题的答案可能会提供信息,帮助人们对 Stack Overflow 上提出的问题形成意见。因此,我提出了这个有形的问题。

假设我们正在使用 Double Submit Cookies 方法(除非有更好的方法我不知道),并且我们将 JWT(例如,身份验证令牌)存储在 HttpOnly、安全 cookie 中。

以下安全堆栈交换页面是相关的:

更新:

我一直在阅读有关反 CSRF 方法的更多信息,并在此 OWASP 页面上将 Double Submit Cookies 方法与替代同步器设计模式和加密令牌模式进行了比较,并指出就防御强度而言,它们可以按以下顺序排列:

  1. 同步器(即 CSRF)令牌
  2. 双重饼干防御
  3. 加密令牌模式

(OWASP 还声明 1. 需要会话状态,而 2. 和 3. 不需要服务器端状态。在题为“利用加密令牌模式”的文章的评论中讨论了加密令牌模式是否实际上是无状态的。也说过文章描述了 3. 解决的 1. 和 2. 的不足,显然没有引入新的安全问题或架构问题。因此,我不知道为什么 OWASP 在防御强度方面将其列为第三。也许是由于测试它在这个时间点是否经历过,因为它和双重提交 Cookie 都是相对较新的;也许是由于文章评论中关于无状态/有状态和重放攻击保护的讨论?如果有解释就好了那个顺序。)

无论如何...如果有人想在使用同步器令牌模式或加密令牌模式的替代假设下回答这个问题,那就太好了。

2个回答

如果有人在您的站点中有 XSS,他们可以在该来源上做任何他们想做的事情——提交任何表单、执行任何操作等。Javascript 可以以任意方式修改 DOM、提交表单、修改用户视图等。

因此,窃取 CSRF 令牌是您最不必担心的事情——XSS 允许任何与 CSRF 允许的来源相同的东西。您唯一可能担心的是,如果您在多个来源之间共享相同的 CSRF 令牌(一开始这将是一个糟糕的做法)。

使用 XSS,您可以对受攻击用户的 DOM 进行读写访问。例如,您可以读取敏感数据或执行网络钓鱼攻击。

但是,如果您无法读取反 CSRF 令牌(当然可以) - 并且您无法读取会话令牌 - 则无法以被攻击用户的名义对服务器执行写入操作。您仍然可以对服务器执行读取操作,因此您可以获得当前尚未显示给用户的敏感数据,但您无法执行更改内容的操作。

但是,当您的反 CSRF 令牌被泄露时,攻击者可以执行任何未受质询-响应机制进一步保护的操作(例如更改密码或电子邮件地址时通常会出现这种情况,这通常需要输入当前密码)。

所以我不同意那些说这没什么好担心的人。破坏 anti-CSRF 令牌使攻击者能够造成更大的破坏,因为它将对服务器的只读访问升级为以被攻击用户的名义进行的读写访问;它只是无关紧要的,因为一旦你有 XSS 漏洞,你就无法阻止令牌的泄露。