利用客户端路径遍历进行跨站请求伪造——CSPT2CSRF技术详解

本文深入探讨了如何利用客户端路径遍历漏洞执行跨站请求伪造攻击,介绍了CSPT2CSRF的概念、来源与接收器分析,并分享了在Mattermost和Rocket.Chat等主流应用中的实际案例。同时发布了用于发现此类漏洞的Burp扩展工具。

Exploiting Client-Side Path Traversal to Perform Cross-Site Request Forgery - Introducing CSPT2CSRF

02 Jul 2024 - 作者 Maxence Schmitt

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

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

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

这项研究介绍了客户端路径遍历的基础知识,提出了用于跨站请求伪造的来源和接收器。为了展示我们发现的影​​响和新颖性,我们在包括Mattermost和Rocket.Chat在内的主要网络消息应用程序中演示了漏洞。

最后,我们发布了一个Burp扩展程序,以帮助发现客户端路径遍历的来源和接收器。

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

客户端路径遍历

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

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

  • Sam Curry在2021年发布的一条推文
  • Johan Carlsson发现的GitLab中的一键CSRF
  • Medi发现的CSS注入,曾入选Portswigger 2022年十大Web黑客技术
  • Erasec的Antoine Roly发现的CSRF
  • 在OWASP以及Soheil Khodayari和Giancarlo Pellegrino的研究论文中也找到了一些关于客户端CSRF的其他参考。

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

利用客户端路径遍历进行跨站请求伪造

这项研究源于我们在Web安全评估期间利用多个客户端路径遍历漏洞的经验。然而,我们意识到缺乏文档和知识来理解使用客户端路径遍历执行CSRF的限制和潜在影响。

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

  • URL片段
  • URL查询
  • 路径参数
  • 注入数据库的数据

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

接收器 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链接起来。

  1. 第一个原语:GET CSPT2CSRF

    • 来源:查询中的id参数
    • 接收器:API上的GET请求
  2. 第二个原语:POST CSPT2CSRF

    • 来源:JSON数据中的id
    • 接收器:API上的POST请求

要链接这些原语,必须找到一个GET接收器小工具,并且攻击者必须控制返回的JSON的id。有时,后端可能直接允许这样做,但我们发现最常见的小工具是滥用文件上传/下载功能。实际上,许多应用程序在API中公开了文件上传功能。攻击者可以上传带有被操纵id的JSON,并以此内容为目标来触发具有状态变更操作的CSPT2CSRF。 在白皮书中,我们以Mattermost中的示例解释了此场景。

与社区分享

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

这篇博客文章只是我们广泛研究的一瞥。要获得全面的理解和详细的技术见解,请参阅白皮书。 随同这份白皮书,我们发布了一个BURP扩展程序来查找客户端路径遍历。

结论

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

更多信息

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

其他相关文章:

  • CSPT Resources - 27 Mar 2025
  • Bypassing File Upload Restrictions To Exploit Client-Side Path Traversal - 09 Jan 2025
  • CSPT the Eval Villain Way! - 03 Dec 2024
  • Unveiling the Prototype Pollution Gadgets Finder - 17 Feb 2024
  • Introducing Proxy Enriched Sequence Diagrams (PESD) - 14 Feb 2023
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计