荷兰电商安全公司 Sansec 披露,一场自 2025 年 7 月持续至今的感染活动已波及 953 家在线商店,绝大多数跑 Magento。攻击者把一小段 JavaScript 塞进 Magento 的 CMS 区块,访客的浏览器会回头问攻击者服务器下一步做什么,而服务器先判断来者是真购物者还是安全扫描器——扫描器什么也拿不到。
事件概述
感染面 953 家店,大多数是 Magento。活动从 2025 年 7 月开始,跨了五个加载器域名。最新一批用 deepveindrilling[.]com,该域名在 2026 年 10 月 6 日注册,Sansec 已在 83 家店的 CMS 区块里找到它,其中 60 家此前就中过其他版本的同一套加载器。
初始入口有据可查:约 471 家店是通过 PolyShell(CVE-2026-48356)被注入的,另有 102 家店的文件是通过 PolyShell 或 SessionReaper(CVE-2025-54236)上传的。但这不是唯一路径——一家 Magento 2.4.7-p10 的站点核心补丁一个不缺,攻击者仍然靠一个流氓管理员账号把代码注了进去。至于最终载荷的性质,Sansec 至今没有抓到。
技术细节
落点是 Magento 的 cms_block 数据库表。这张表本来是用来把静态内容渲染到店面页面的,CMS 区块一渲染,里面的脚本就执行。攻击者不需要改主题文件、不需要写 PHP、不需要碰任何 .php 文件——所以基于文件完整性的检测在这一层是瞎的。
manulfie[.]click 2025-07
neswnsssn[.]click 2025-12
lanhd6549tdhse[.]top 2026-03
additionalver[.]com 2026-06
deepveindrilling[.]com 2026-10(10 月 6 日注册)
最新域名挂在 Cloudflare 后面,只回应来自被感染店真实访客的脚本请求。加载器被发现有两个版本:第一个版本把远端 JS 带下来的载荷写进浏览器的 localStorage,这样即使外部域名后来下线,暂存的代码在之后的访问里还会再执行一次;第二个版本在持久化之上加了浏览器指纹,把机器人和安全扫描器筛掉,确保只有真实购物者接触到恶意代码。
活动早期还用过 Keitaro——一个广告追踪与流量分发平台——当流量分发系统,按访客特征返回不同响应:投载荷、跳转,或者什么都不给。以 Windows 桌面访客身份请求 additionalver[.]com 的脚本,返回的只是 QWE=123;,除了设置一个 24 小时的访客标记 Cookie 之外什么也没做。换到 deepveindrilling[.]com,Keitaro 这一层被去掉,机器人过滤逻辑直接内建进加载器。
还有一个细节值得单独拎出来:一家 Magento 2.4.7-p1 的店里,pub/media/custom_options/quote/ 目录下躺着伪装成 PNG 的 PolyShell webshell,紧挨着 CMS 区块里 additionalver.com 的加载器。这家店至今没装 APSB26-73,也就是 Adobe 针对 PolyShell 的修复。
影响评估
对店主来说,最坏的情况是看起来完全正常:站点能打开、速度正常、扫描器报干净,但每一个真实客户都在加载攻击者的代码。这类低噪声长驻比挂马跳转危险得多,因为没人会去查。
- 持续时间超过 15 个月、同一批店铺反复中招,说明单次清理没用,攻击者有回注能力,入口没堵。
- 检测盲区明确:CMS 区块属于业务数据,文件完整性监控看不到;用扫描器 UA 抓取也抓不到,因为服务端会把它筛掉。
- 对购物者,风险取决于最终载荷——支付页劫持、表单窃取、会话劫持都在可能范围内。
- 补丁齐全不等于安全。那个 2.4.7-p10 的案例就是反例:核心无缺失,照样被注。
修复建议
- 直接查库:
cms_block与cms_page两张表里搜上述域名,以及任何可疑的<script src>。同时查pub/media/下伪装成图片的 PHP 文件。 - 清完必须回溯入口:流氓管理员账号、过期未删的插件、被盗的 API token、遗留的 webshell。只清前台脚本,几天内就会回来。
- 补齐 PolyShell(CVE-2026-48356)与 SessionReaper(CVE-2025-54236)的修复,APSB26-73 该装就装。
- 上 CSP:
script-src走白名单,外部域名来的加载器直接被浏览器拦死。这一条对同类攻击普遍有效,不只是这一次。 - 给 CMS 区块加变更审计——数据库触发器或后台操作日志都行。内容管理员改区块是正常业务,但改出
<script>就该报警。 - 自查手法:用真实浏览器(不是扫描器 UA)打开自家店面,看网络面板里有没有陌生的第三方域名请求。这是目前能绕过指纹过滤的验证方式。