跳转至

客户端路径遍历 (Client Side Path Traversal)

客户端路径遍历 (CSPT),有时也被称为“站内请求伪造 (On-site Request Forgery)”,是一种可以被用作 CSRF 或 XSS 攻击工具的漏洞。 它利用了客户端使用 fetch 向 URL 发起请求的能力,其中可以注入多个 ../ 字符。归一化 (normalization) 后,这些字符会将请求重定向到不同的 URL,从而可能导致安全漏洞。 由于每个请求都是从应用程序的前端发起的,浏览器会自动包含 Cookie 和其他身份验证机制,使其可被这些攻击利用。

摘要 (Summary)

工具 (Tools)

方法论 (Methodology)

CSPT 转 XSS

cspt-query-param

一个提供文章内容的页面调用 fetch 函数,向一个包含攻击者控制且路径未正确编码的输入的 URL 发送请求,允许攻击者在路径中注入 ../ 序列,使请求被发送到任意端点。这种行为被称为 CSPT 漏洞。

示例:

  • 页面 https://example.com/static/cms/news.html 接收 newsitemid 作为参数
  • 然后获取 https://example.com/newitems/<newsitemid> 的内容
  • 同时发现 https://example.com/pricing/default.js 存在通过 cb 参数进行的文本注入
  • 最终的 Payload 为:https://example.com/static/cms/news.html?newsitemid=../pricing/default.js?cb=alert(document.domain)//

CSPT 转 CSRF

CSPT 正在重定向合法的 HTTP 请求,允许前端为 API 调用添加必要的令牌,例如身份验证或 CSRF 令牌。这种能力可能被用来规避现有的 CSRF 保护措施。

CSRF CSPT2CSRF
是否支持 POST CSRF ? ✅ ✅
是否能控制请求主体 (Body) ? ✅ ❌
是否能绕过抗 CSRF 令牌 ? ❌ ✅
是否能在 Samesite=Lax 下工作 ? ❌ ✅
GET / PATCH / PUT / DELETE CSRF ? ❌ ✅
1-click CSRF ? ❌ ✅
影响是否取决于输入源 (source) 和输出点 (sink) ? ❌ ✅

真实案例:

  • Rocket.Chat 中的 1-click CSPT2CSRF
  • CVE-2023-45316:Mattermost 中带有 POST 输出点的 CSPT2CSRF:/<team>/channels/channelname?telem_action=under_control&forceRHSOpen&telem_run_id=../../../../../../api/v4/caches/invalidate
  • CVE-2023-6458:Mattermost 中带有 GET 输出点的 CSPT2CSRF
  • 客户端路径操纵 - erasec.be:CSPT2CSRF https://example.com/signup/invite?email=foo%40bar.com&inviteCode=123456789/../../../cards/123e4567-e89b-42d3-a456-556642440000/cancel?a=
  • CVE-2023-5123:Grafana JSON API 插件中的 CSPT2CSRF

实验环境 (Labs)

参考资料 (References)