【ShopifyHelpCenterAI助手Markdown渲染缺陷导致CSRF与RXSS组合攻击】"

admin 2026-10-20 16:18:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

【Shopify Help Center AI 助手 Markdown 渲染缺陷导致 CSRF 与 RXSS 组合攻击】

原创

卡布奇诺的派对
卡布奇诺的派对

卡布奇诺的派对

2026年6月22日 12:19
河南

在小说阅读器读本章

去阅读

Shopify 帮助中心(help.shopify.com)的 AI 聊天助手在处理 Markdown 图片渲染时存在缺陷,攻击者可利用跨站请求伪造(CSRF)在受害者会话中植入恶意 Markdown 图片链接,最终触发反射型 XSS(RXSS),进而泄露用户个人信息并劫持支持对话。


*声明:文章内容仅限授权安全测试与学术研究,不得用于任何违法或未授权行为。使用者须自行承担全部法律及连带责任。作者及发布方不承担任何责任。*

漏洞概述

Shopify 帮助中心的 AI 聊天机器人在向用户展示问候语时,支持 Markdown 语法以丰富对话体验。在问候语的生成过程中,部分用户可控的输入会被直接反射到页面中。攻击者通过一个 CSRF 请求,可在受害者的会话中设置包含恶意 Markdown 图片的问候语。当受害者后续访问搜索页面时,该问候语被渲染,其中的 Markdown 图片链接因 target=\"_blank\" 属性,需要用户使用鼠标中键点击才能触发 XSS(但攻击者可通过社会工程诱导用户执行该操作)。一旦触发,恶意脚本将窃取受害者个人信息,并尝试将攻击者邮箱添加为受害者已有支持对话的订阅者,从而获取对话内容或参与其中。


根本原因

  1. CSRF 漏洞:https://help.shopify.com/en/search 端点接受 POST 请求,其中 greeting 参数可被攻击者任意设置,且该请求缺乏有效的 CSRF 防护(如 anti-CSRF token 或同源校验),使得攻击者可以跨站诱导已登录用户发起该请求,将恶意问候语存入受害者会话。
  2. Markdown 渲染缺陷:问候语中的 Markdown 图片语法(![alt](url))会被解析并渲染为 HTML 链接(` 标签),且该链接带有target=\"_blank\"属性,用户点击时会在新标签页打开。攻击者将javascript:伪协议作为图片 URL,构造出可执行代码的链接。虽然浏览器对javascript:协议在新窗口中的执行有所限制(需要用户主动点击),但攻击者通过mouse wheel click`(鼠标中键点击)即可绕过部分限制,触发 XSS。
  3. XSS 载荷的编码与混淆:攻击者将完整的 JavaScript 载荷进行 Base64 编码,并放置在 javascript:eval(atob('...')) 中,以规避简单过滤。

攻击链路(完整复现)

步骤 1:攻击者构造 CSRF 页面
 攻击者制作一个恶意 HTML 页面,包含一个隐藏表单,向 https://help.shopify.com/en/search?_data=routes%2F%28%24locale%29.search 发起 POST 请求,参数如下:

  • query

:任意搜索词(如 Is this XSS?)
* greeting

:值为 Markdown 图片语法,其中图片 URL 为 javascript:eval(atob('<Base64 编码的载荷>'))

该页面同时包含第二个表单,用于在 2 秒后自动发起 GET 请求,以便受害者访问搜索页面时触发渲染。

步骤 2:诱导受害者访问 CSRF 页面
 攻击者将恶意页面链接发送给已登录 Shopify 帮助中心的受害者。当受害者访问该页面时,表单自动提交(利用浏览器跨域 POST 的默认行为),在受害者会话中设置了带有恶意问候语的搜索状态。

步骤 3:受害者跳转至搜索页面
 CSRF 页面在提交后,会通过第二个表单或 JavaScript 自动重定向受害者到 https://help.shopify.com/en/search?q=Is%20this%20XSS%3F。此时,帮助中心的 AI 聊天问候语被渲染为 Markdown 图片链接,内容类似:![Mouse wheel click here for more info...](javascript:eval(atob('...')))。由于该链接带有 target=\"_blank\",受害者需要“鼠标中键点击”该链接才能在新标签页中触发 XSS。

步骤 4:触发 XSS 并执行恶意载荷
 一旦受害者中键点击该链接,javascript: 协议被执行,Base64 解码后的载荷开始运行。载荷的功能包括:

  • 向攻击者控制的服务器发送请求,泄露当前用户的个人信息(如邮箱、姓名等),这些信息可通过 window.__remixContext.state.loaderData.root.userInfo 获取。
  • 调用 GraphQL API 查询受害者最近的支持对话(conversations(last: 1)),获取对话 ID。
  • 使用该对话 ID,通过 GraphQL 变更(mutation)subscriberCreate,将攻击者控制的邮箱([email protected])添加为该对话的订阅者,从而允许攻击者接收对话通知并参与其中。

步骤 5:攻击者接管对话
 攻击者成功订阅后,可接收该对话的所有后续消息,甚至可能通过 Shopify 的客服系统回复,进一步获取敏感信息或进行社会工程。


影响与危害

  • 危害等级

:高(可导致用户 PII 泄露及支持对话被第三方监控,涉及隐私侵犯和账户关联风险)
* 攻击门槛

:中(需要受害者点击链接并执行一次中键点击,但攻击者可通过诱导性文案提高成功率)
* 泄露数据

  • 用户个人信息(根据 userInfo 内容,可能包括邮箱、姓名、用户 ID 等)
  • 用户与 Shopify 客服的历史对话记录(通过订阅获取)

  • 后续利用

:攻击者可阅读受害者的客服对话,甚至冒充受害者与客服沟通,进而可能执行账户恢复、密码重置等进一步操作,扩大影响范围。


修复建议

  1. CSRF 防护:在 /en/search 端点的 POST 请求中引入 anti-CSRF token,或使用 SameSite 属性限制跨站请求。
  2. 输入过滤与输出编码:对用户可控的 greeting 参数进行严格过滤,禁止或转义 javascript:、data: 等危险协议,并在渲染 Markdown 图片链接时,对 URL 进行协议白名单检查(仅允许 http/https)。
  3. 用户交互强化:对于带有 target=\"_blank\" 的链接,可在 rel 属性中添加 noopener noreferrer,并考虑禁用 javascript: 协议在 href 中的执行,或使用 Content Security Policy(CSP)限制脚本来源。
  4. 敏感数据保护:确保 window.__remixContext 等客户端全局对象不包含过多敏感信息,或对其进行脱敏处理。

小结

该漏洞展示了如何将两个中低风险问题(CSRF 和 Markdown 注入)串联,形成高风险的账户数据泄露链。Shopify 帮助中心的 AI 聊天功能在设计上未充分考虑用户输入的可信度,且缺乏对跨站请求的有效防护。在修复时,除了修补正则表达式和添加 token,还应全面审查所有用户可控内容在 Markdown 渲染中的处理方式,确保不会引入可执行代码。


原文链接:https://hackerone.com/reports/2509022


    一款功能强大的应急分析溯源日志工具" 网络安全文章

    一款功能强大的应急分析溯源日志工具"

    该文档介绍一款名为wooluo的Web日志安全分析工具,专为安全应急响应和威胁溯源设计。工具集成规则引擎支持SQL注入/XSS等攻击检测,具备AI智能分析、IP地理位置识别、多格式报告生成等功能,支持大文件高效处理。系统采用模块化架构,所有功能通过配置文件管理,无需修改代码。
    因果推断:相关不等于因果" 网络安全文章

    因果推断:相关不等于因果"

    本文系统阐述因果推断核心思想‘相关不等于因果’,通过经典案例揭示混淆变量导致的伪因果关系,并介绍反事实框架、随机对照试验、倾向得分匹配、工具变量等主流推断方法,以及因果图在识别混淆因素中的应用,最后探讨因果推断在机器学习领域的革命性意义,旨在帮助读者建立科学决策思维。
    edu某大学的小程序和学生信息系统漏洞挖掘" 网络安全文章

    edu某大学的小程序和学生信息系统漏洞挖掘"

    本文详细记录了某大学小程序和学生信息系统的漏洞挖掘过程,通过抓包工具发现越权访问、敏感信息泄露及XSS漏洞。作者利用搜索引擎获取学号与身份证信息,通过Burp抓包实现全校学生隐私数据遍历,并演示了修改参数越权查看缴费票据、绕过黑名单过滤实现XSS攻击等实操步骤。文章强调所有测试均需授权,并附有工具使用指南。
    评论:0   参与:  0