CVE-2026-103849:Magento 满分模板注入,未登录即可执行 PHP

Adobe 于 2026 年 10 月 13 日发布安全公告 APSB26-153,修复 Magento 与 Adobe Commerce 邮件模板引擎中的 CVE-2026-103849,CVSS 3.1 评分 10.0,归类为模板引擎特殊元素中和不当(CWE-1336)。Sansec 将其命名为 BlockStrap:未认证攻击者只要能让受控数据进入模板,就能在商店服务器执行任意 PHP。

事件概述

Adobe 定为 Critical、优先级 2。受影响范围横跨多个分支:Adobe Commerce 2.4.4 至 2.4.9(含 2026-sep 及更早)、Commerce B2B 至 1.5.3、Magento Open Source 2.4.6 至 2.4.9,以及 Mage-OS 3.5.0 及更早版本。

它是 9 月 StyleSmuggler(CVE-2026-75650)的后续。Adobe 当时用热修 VULN-39341 补上首轮问题,Sansec 指出那次修复在模板二次校验环节留下另一条路径,BlockStrap 正是从这条缝穿过去的。

技术细节

根因是二次解析。子模板内容生成后会被签名并通过校验,根模板渲染时又把它的输出扫描一遍。{{block}} 指令藏进子模板输出后,第一轮只是普通文本、能过签名检查,第二轮在根模板上下文中被当作合法指令执行,从而触达外部本不可调用的对象与方法。

入口是前台任何能把用户输入带进邮件模板的地方——注册、找回密码、订阅、订单备注,系统发通知邮件时触发渲染。攻击流量与普通下单无异,前端没有提示,管理员能看到的往往只是 PHP 进程起了不该起的子进程。

Sansec 在补丁发布后一天内复现四条独立攻击路径,截至 10 月 15 日未观察到针对线上商店的实际攻击。

影响评估

CVSS 10.0 的向量是网络可达、无权限要求、低复杂度、无需交互,作用域越界。落到业务上,攻击者可读取或篡改客户资料、订单历史与支付信息,进而往 Web 根目录写 WebShell、投放二级载荷,把电商前台变成内网跳板。

窗口期很窄:StyleSmuggler 从 Priority 1 热修到大规模利用只用了三天,Sansec 因此认为 Priority 2 低估了 BlockStrap。

修复建议

升级到 2026-oct 版本或安装隔离补丁,并保留 9 月的 VULN-39341 热修——两者独立,缺一不可。公开补丁覆盖 Open Source 2.4.7-p10、2.4.8-p5、2.4.9;2.4.4-p18、2.4.5-p17、2.4.6-p15 需 Commerce 授权。仍在 2.4.6 及更早的站点必须先迁到 2.4.7-p10 以上,Mage-OS 升级 3.6.0。

一次 Composer 安装不保证补丁落地,脚本里一句 patch ... || true 就能让失败的 hunk 静默跳过。在 Magento 根目录执行检查,返回 0 说明没打上:

grep -c resolveDeferredDirectives vendor/magento/framework/Filter/Template.php
vendor/bin/magento-patches -n status | grep "39341\|Status"

Mage-OS 换成对应路径。2.4.8-p5 首个构建漏掉 CVE-2026-91013,需另补 248p5-2026-10-002-CE;根目录残留的空锁文件可直接删除。

检测侧重点看模板端点的重复请求与含指令语法的参数、PHP-FPM 拉起的非预期子进程、Web 根新增文件。

参考来源