【问题标题】:Would you count following scenario as (dangerous) CSRF?您会将以下情况视为(危险的)CSRF 吗?
【发布时间】:2023-11-19 00:17:01
【问题描述】:

想象一下你有一个大的合作。现在有人发现了只能通过自己的站点工作的 CSRF 漏洞(因为站点是通过检查 Referer-Header 来保护的,没有 CSRF 令牌)。这可以执行关键操作,但前提是请求来自您的站点。这意味着小型 XSS 攻击可以通过此漏洞执行更大的操作。您会将此视为严重漏洞吗?是否应将其视为 CSRF 攻击?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为与编程没有直接关系。 // 推荐人有多不可靠,应该是常识——所以如果你的部分“安全”是基于它的,那已经是坏消息了。
  • 很抱歉,我在大合作中发现了一个漏洞,正是这种情况。除了 XSS 或使用旧浏览器的弱点之外,还有其他方法可以执行攻击吗?我只是想为他们可能提出的问题做好准备(如果他们提出任何问题或决定拒绝奖励)。编辑:他们真的那么不可靠吗?我在网上搜索并发现多个来源说这很好,但不是最好的方法。

标签: security xss csrf


【解决方案1】:

这被称为On Site Request Forgery

XSS 漏洞总是胜过任何 CSRF/OSRF 攻击。试想一下,如果表单不受referer 保护而是受令牌保护,XSS 攻击可以简单地从 DOM 中读取令牌,然后提交表单。

因此,网站没有额外的风险。唯一的例外是您将 Open Redirect Vulnerability 与作为 GET 实现的不安全操作结合使用。

假设以下 URL 可用:

https://example.com/delete_my_account

处理程序验证引用者以确保请求来自https://example.com/*

但是,还有另一个可用的 URL 发出 JavaScript 重定向:

https://example.com/redirect_to_site

这将在网站内按如下方式调用以跟踪外部链接:

https://example.com/redirect_to_site?https://google.com

但是,通过构造一个重定向到类似以下内容的 CSRF 攻击,OSRF 攻击是可能的:

https://example.com/redirect_to_site?https://example.com/delete_my_account

因为检查了referer,这将验证请求,因为这里只有delete_my_account 正在检查referer,因为这被认为是不安全的操作。但是,因为它可以通过未受保护的处理程序重定向,它可以破坏引用保护。

因此,除非网站上有这样的功能,或者除非网站允许用户内容构建这样的链接,否则在检查引用者以进行 CSRF 保护方面不存在漏洞。

注意: 在任何人提到引用标头可以被欺骗之前,这只能通过攻击者自己的连接来实现。在 CSRF 攻击中,您需要在受害者的连接上对其进行欺骗 - CSRF 是针对另一个用户的攻击 - 因此,尽管 refererer 是一种较弱的保护,但在许多情况下仍然足够。

【讨论】: