Magento 2 安全指南:修补漏洞并阻断 ClickFix、PolyShell 与 CosmicSting
基于 Magento 2 与 Adobe Commerce 的电商站点始终是自动化攻击活动的目标。每一个新的 2.4.x 版本都会带来一批安全补丁,而攻击者往往在数天内逆向分析这些补丁,并针对尚未更新的站点构造可用的漏洞利用代码。本文介绍近几个月观察到的主要威胁、如何识别它们在服务器上留下的痕迹,以及清除威胁并防止下一次入侵的实用步骤。
为什么未修补的 2.4.x 是首要目标
Adobe 会定期发布 Magento Open Source 与 Adobe Commerce 的安全公告,每份公告都会列出该版本修复的漏洞。从补丁发布到公开的概念验证代码出现,如今的时间间隔以小时而非周计算。仍停留在旧补丁级别的站点,实际上是在运行已被公开并武器化的漏洞。因此第一项对策始终不变:将核心升级到最新的安全版本,并应用针对你所使用分支发布的全部官方补丁与热修复。
ClickFix:伪造的人机验证复选框
ClickFix 是一种社会工程手法,它并不直接利用 Magento,而是滥用访客对熟悉界面的信任。在被入侵的站点上,结账页或落地页会被篡改,显示一个伪造的 Cloudflare『请验证您是真人』组件。访客像在正常验证页面上一样勾选复选框,此时脚本会被静默写入剪贴板。这一刻并不会造成任何损害,页面甚至可能看起来仍在正常运行。
危险出现在第二步。伪造页面会指示访客打开 macOS 或 Windows 的终端窗口,粘贴刚才复制的内容以完成验证。如果访客照做,粘贴的命令就会下载第二阶段的载荷并在客户端设备上执行。对用户而言,规则简单而绝对:绝不要把网页上的命令粘贴到终端。对管理员而言,规则是找到被注入的脚本、将其删除,并封堵导致篡改的入口。
服务器端入侵:PolyShell、CosmicSting 与 env.php
多类漏洞主导了 Magento 2 的事件报告。PolyShell 滥用通过 REST API 的任意文件上传,写入同时是有效图片又是有效 PHP 的多语言文件。CosmicSting 针对模板引擎,可能导致未授权远程代码执行。StyleSmuggler 与 BlockStrap 则遵循类似的模板注入与过滤器绕过模式。在最严重的情况下,攻击者会读取 env.php,提取其中保存的加密密钥并伪造有效的管理员令牌,从而在漏洞路径被封堵之后仍能保持对后台的持久访问。
| 漏洞 | 攻击途径 | 影响 |
|---|---|---|
| PolyShell | 通过 REST API 的任意文件上传 | 在 pub/media 中写入多语言 PHP 文件 |
| CosmicSting | 模板引擎注入 | 未授权远程代码执行 |
| StyleSmuggler | 模板与过滤器绕过 | 代码注入与数据泄露 |
| BlockStrap | 输入验证缺陷 | 后台访问权限与密钥窃取 |
| ClickFix | 前端脚本注入 | 在访客设备上执行恶意软件 |
在 app、vendor 与 cache 中查找混淆代码
恶意代码很少显而易见。攻击者会把它藏在标准的 .phtml 模板、核心模块,以及 cache 与 var 目录中生成的文件里。用常见关键字做纯文本搜索往往一无所获,因为载荷是在运行时由 base64 字符串或多个片段拼接而成的。近期的一个案例中,vendor 文件夹内某个 .phtml 文件仅被轻微修改,恶意字符串被拆分到多个变量中。
请将你的安装与同一版本的干净副本进行比对。使用文件完整性校验、检查修改时间,并逐一审查与官方安装包不一致的文件。发现受感染文件时,不要只是删除载荷:应从官方压缩包恢复原始版本,然后升级或封堵导致写入的漏洞路径。
pub/media 中绝不应出现 PHP
media 目录用于存放图片、PDF 及其他静态资源。在 pub/media 下存在 .php、.php7、.phtml 或 .phar 文件没有任何正当理由。然而攻击者仍不断上传这类文件,最常藏身的位置是 pub/media/custom_options/ 与 pub/media/custom_options/quote/,即上传选项文件的存放目录。请递归扫描这些目录,删除所有可执行文件,并确认上传配置会拒绝异常扩展名。
在边缘层用 Cloudflare、Nginx 与 Apache 拦截
如果入口仍然敞开,仅清理服务器是不够的。请在请求到达 Magento 之前封堵漏洞路径。在 Cloudflare 中,你可以创建 WAF 规则,拒绝发往 /pub/media/custom_options/ 及类似目录的请求,或对任何试图访问 media 路径下 PHP 文件的请求发起质询。在源站服务器上,请在 Nginx 或 Apache 中添加等效规则,以便在流量绕过 CDN 时保护依然有效。
请记住,边缘规则只能拦截你已经知道的请求。应将其与补丁、文件监控以及定期的代码审计结合使用。
修复检查清单
| 步骤 | 操作 |
|---|---|
| 1 | 将 Magento 升级到最新的 2.4.x 版本并应用所有安全补丁 |
| 2 | 扫描 app、vendor、cache 和 var 目录,查找混淆或被修改的文件 |
| 3 | 从官方安装包恢复原始文件 |
| 4 | 删除 pub/media 中所有 PHP、php7、phtml 和 phar 文件 |
| 5 | 轮换加密密钥并使现有管理员会话失效 |
| 6 | 在 Cloudflare、Nginx 或 Apache 中拦截存在风险的路径 |
| 7 | 删除并重新生成所有缓存和编译代码 |
结语
Magento 的安全是一个循环,而不是一次性任务。及时打补丁、校验文件完整性、让可执行代码远离 media 目录,并封堵你并不需要的路径。如果你怀疑存在 ClickFix 注入,请立即提醒客户:阻止损害最快的方法,就是确保没有人把任何内容粘贴到终端里。
