2026 年 10 月 24 日,电商安全公司 Sansec 在巴西电商平台 Convertr 自托管的 Plausible 分析脚本里发现了一段不属于原版的代码。由于平台上每一家商户的结账页都从同一台服务器加载这份脚本,一次改动就覆盖了全部店铺。Convertr 为数十家巴西时尚品牌提供建站与结账服务。恶意脚本运行到 10 月 27 日 12:54 UTC 才被清除。
事件概述:一个文件,全平台结账页
被改的是 analytics.convertr.app.br 上的 /js/script.pageview-props.tagged-events.js。Plausible 是 Google Analytics 的开源替代品,直接从磁盘读取并返回 tracker 文件——任何拿到服务器命令执行权限的人,都能改掉所有嵌入方的脚本。感染手法并不复杂:在正常代码后追加由字符码组成的混淆数组,用 String.fromCharCode 还原后经间接 (0,eval) 执行。脚本只在 URL 包含 checkout.convertr 时激活。
技术细节:偷什么、发到哪
采集字段包括卡号、有效期、CVV、持卡人姓名,以及巴西纳税人识别号 CPF。CPF 之所以关键,是因为巴西结账流程在刷卡付款时普遍要求填写,当地银行也用 CPF 识别客户——卡号加 CPF 的组合可直接用于身份欺诈,危害远大于单张卡被盗。数据被打包成管道符分隔的字符串,末尾附受害者短标签,Base64 编码后以 POST 发往 https://1x0.is/ws;请求设置了 mode: no-cors 与 keepalive: true,用户提交后立刻关掉页面,外传仍会完成。
24 日初版用通用字段选择器,26 日换成针对 Convertr 支付 API 精确字段名的新版本——这两天的迭代说明对方拿到权限后专门研究过目标的结账流程。入口方面,Sansec 怀疑但未确认是 CVE-2026-8467:Plausible 社区版 3.0.0 至 3.2.0 通过暴露的 /storybook 组件库实现未认证命令执行,2026 年 5 月 15 日在 3.2.1 修复,而 Convertr 在 2025 年部署的社区版 3.0 此后一直没升级。研究者没拿到服务器日志,这条链路只能算可疑而非定案。代码特征指向一个自 2024 年 7 月起活跃的巴西 Magecart 团伙,此前它逐个攻破 Magento、OpenCart 与 WooCommerce 店铺,这是其首次供应链打法。
影响评估:常规结账防御为什么没拦住
恶意代码来自结账页本来就信任的源:HTTPS 只保证传输不被篡改,管不了一个可信主机主动返回恶意内容;内容安全策略若只把分析域名加进白名单,被改过的文件照样放行;子资源完整性校验理论能拒绝被篡改脚本,但分析脚本更新频繁,钉死哈希不可行。被窃卡片数量、攻击者控制服务器的时长、CVE-2026-8467 是否为真实入口,均未说明。另一个容易忽略的尾巴是浏览器缓存:服务器端清理后,被污染的脚本仍可能在用户浏览器里继续执行最多 24 小时。
修复建议:把结账页的脚本清单列出来
- 清点并最小化第三方脚本。列出结账页加载的全部外部脚本及其托管方与补丁责任人;支付步骤不需要的分析、客服脚本直接移除。
- 自托管分析组件当生产软件管。Plausible 社区版升级到 3.2.1 及以上,排查日志中是否存在
/storybook请求,轮换服务器密钥,并把 tracker 文件与官方发行版比对。 - 按 PCI DSS 4.0 的脚本要求落地。该版本新增的支付页脚本清单与变更检测要求,针对的正是”代码托管在别人服务器、只在用户浏览器执行”的场景;服务器扫描干净不等于结账页干净。