利用客户端路径遍历实施跨站请求伪造(CSRF)— 引入CSPT2CSRF技术详解

本文深入探讨了如何利用客户端路径遍历漏洞执行跨站请求伪造攻击,并介绍了创新的CSPT2CSRF技术。通过分析实际案例(如Mattermost、Rocket.Chat等主流应用),揭示了该类漏洞的严重性与利用方法,同时发布了用于自动化检测的Burp扩展工具。

利用客户端路径遍历执行跨站请求伪造 - 引入 CSPT2CSRF

02 Jul 2024 - 发布者:Maxence Schmitt

为了给用户提供更安全的浏览体验,IETF提出的“逐步改进Cookie”提案推动了一些重要变更,以解决跨站请求伪造(CSRF)和其他客户端问题。不久之后,Chrome和其他主流浏览器实施了建议的更改,并引入了SameSite属性。SameSite有助于缓解CSRF,但这意味着CSRF就此消失了吗?

在审计主流Web应用程序时,我们意识到客户端路径遍历(CSPT)实际上可以被利用来“复活”CSRF,让所有渗透测试人员为之欣喜。

这篇博客文章是对我研究的简要介绍。详细的研究发现、方法论和深度分析可在白皮书中找到。

本研究介绍了客户端路径遍历的基础知识,并展示了用于跨站请求伪造的“源”(Sources)和“汇”(Sinks)。为了证明我们发现的影 响力和新颖性,我们展示了包括Mattermost和Rocket.Chat在内的主要网络消息应用程序中的漏洞。

最后,我们发布了一个Burp扩展,以帮助发现客户端路径遍历的“源”和“汇”。

感谢Mattermost和Rocket.Chat团队的合作以及授权分享此内容。

客户端路径遍历(CSPT)

每位安全研究人员都应该知道什么是路径遍历。此漏洞使攻击者能够使用类似../../../../的载荷来读取预期目录之外的数据。与从服务器读取文件的服务器端路径遍历攻击不同,客户端路径遍历攻击专注于利用此弱点来向非预期的API端点发出请求。

虽然此类漏洞在服务器端非常普遍,但只有少数关于客户端路径遍历的案例被广泛公开。我们发现的第一个参考资料是Philippe Harewood在Facebook漏洞赏金计划中报告的一个漏洞。自那以后,我们只找到了一些关于客户端路径遍历的参考资料:

  • Sam Curry在2021年发布的一条推文
  • Johan Carlsson发现的GitLab中的1-click CSRF漏洞
  • Medi发现的CSS注入漏洞,该漏洞曾入选Portswigger 2022年十大Web黑客技术
  • Erasec的Antoine Roly发现的一个CSRF漏洞 此外,还发现了一些关于OWASP中客户端CSRF以及Soheil Khodayari和Giancarlo Pellegrino在这篇研究论文中的其他参考资料。

客户端路径遍历多年来一直被忽视。虽然许多人认为其影响较低,但它实际上可以用来强制最终用户在Web应用程序上执行不需要的操作。

利用客户端路径遍历执行跨站请求伪造(CSPT2CSRF)

这项研究源自于我们在Web安全审计中利用多个客户端路径遍历漏洞的经验。然而,我们意识到缺乏文档和知识来理解使用客户端路径遍历执行CSRF(CSPT2CSRF)的局限性和潜在影响。

在研究过程中,我们发现了一个常见的偏见。研究人员可能认为用户输入必须在前端。然而,就像XSS一样,任何用户输入都可能导致CSPT(想想DOM型、反射型、存储型):

  • URL片段(fragment)
  • URL查询参数(Query)
  • 路径参数(Path parameters)
  • 注入数据库中的数据

在评估一个“源”时,您还应该考虑是否需要任何操作来触发漏洞,或者漏洞是否在页面加载时触发。实际上,这种复杂性将影响漏洞的最终严重性。

CSPT将重定向一个合法的API请求。因此,攻击者可能无法控制HTTP方法、请求头和请求体。 所有这些限制都与“源”相关。实际上,同一个前端可能有执行不同操作(例如GET/POST/PATCH/PUT/DELETE)的不同“源”。 每个CSPT2CSRF漏洞都需要描述其“源”和“汇”,以确定漏洞的复杂性和严重性。

作为攻击者,我们希望找到所有具有相同限制且影响重大的“汇”。这可以通过以下方式完成:

  • API文档
  • 源代码审查
  • Semgrep规则
  • Burp Suite Bambda过滤器

具有GET“汇”的CSPT2CSRF

利用具有GET“汇”的CSPT存在一些场景:

  • 使用开放式重定向来泄露与“源”相关的敏感数据
  • 使用开放式重定向来加载恶意数据以触发XSS

然而,开放式重定向现在被许多安全研究人员追猎,并且在采用现代框架的前端中找到XSS可能很困难。

也就是说,在我们的研究中,即使状态改变操作没有直接通过GET“汇”实现,我们也经常能够通过CSPT2CSRF来利用它们,而无需满足上述两个先决条件。

实际上,通常可以将一个具有GET“汇”的CSPT2CSRF与另一个能改变状态的CSPT2CSRF链接起来。

第一个原语:GET CSPT2CSRF:

  • 源: 查询参数中的id
  • 汇: API上的GET请求

第二个原语:POST CSPT2CSRF:

  • 源: JSON数据中的id
  • 汇: API上的POST请求

为了链接这些原语,必须找到一个GET“汇”的“小工具”(gadget),并且攻击者必须控制返回JSON的id。有时,这可能直接被后端允许,但我们发现的最常见“小工具”是滥用文件上传/下载功能。事实上,许多应用程序在API中暴露了文件上传功能。攻击者可以上传带有被操纵id的JSON,并以此内容为目标来触发具有状态改变操作的CSPT2CSRF。

在白皮书中,我们以Mattermost中的示例解释了此场景。

与社区分享

这项研究上周由Maxence Schmitt (@maxenceschmitt) 在OWASP Global Appsec Lisbon 2024上展示。幻灯片可以在此处找到。

这篇博客文章只是我们广泛研究的一个缩影。为了全面理解和获取详细的技术见解,请参阅白皮书。

除了这份白皮书,我们还发布了用于查找客户端路径遍历的BURP扩展。

总结

我们认为CSPT2CSRF被许多安全研究人员忽视,并且大多数前端开发人员也不了解。我们希望这项工作能够突出这类漏洞,并帮助安全研究人员和防御者保护现代应用程序。

更多信息

如果您想了解更多关于我们的其他研究,请查看我们的博客,在X (@doyensec) 上关注我们,或者随时通过info@doyensec.com与我们联系,了解更多关于我们如何帮助您的组织“安全构建”的信息。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计