CVE-2026-103849 BlockStrap PoC lab开源:Adobe Commerce未认证RCE完整复现,MIT协议可下载

导语:Adobe在2026年10月补丁日发布APSB26-153,修补了编号为CVE-2026-103849的高危模板引擎注入漏洞,CVSS评分满分10.0。漏洞影响Magento Open Source 2.4.9与Adobe Commerce 2.4.4至2.4.9版本,攻击者无需任何凭据即可远程执行代码。10月18日,安全研究员Nicolas Krassas(Dinosn)在GitHub开源了对应PoC复现环境,仓库为MIT协议,企业可用于验证补丁与检测规则开发。


一、PoC lab 公开事件

10月18日,安全研究员 Nicolas Krassas(推特账号 @Dinosn)在 X 平台宣布开源 CVE-2026-103849(代号 BlockStrap)的复现实验环境,仓库地址为 github.com/dinosn/cve-2026-103849-blockstrap-lab。

仓库使用 MIT 协议授权,初始提交时间为 2026 年 10 月 18 日 08:12 UTC,整个仓库大小约 76 KB,主要内容由 Shell 与 YAML 组成。仓库自带 GitHub Actions 静态校验徽章,README 中明确标注”只在自己控制的系统上运行”的安全边界。

与 Adobe 官方公告侧重修复说明不同,这个仓库把重心放在了”如何科学地验证补丁”上。它提供了完整的 Docker Compose 实验环境、经过校验的 Magento 2.4.9 源代码(固定 commit)、Adobe 官方 9 月 VULN-39341 与 10 月 APSB26-153 两个补丁的纯文本提取,以及若干 A/B 比对脚本。

二、漏洞背景与官方评分

CVE-2026-103849 在 Adobe 安全公告中被描述为一项关键、未认证、任意代码执行缺陷,CVSS v3.1 评分 10.0。它与 9 月修补的 VULN-39341(又称 StyleSmuggler)属于同一攻击面,Adobe 在公告中明确要求用户在安装 10 月补丁前必须先具备 9 月隔离补丁。

Sansec 研究团队在同期发布的 BlockStrap 分析报告中称复现了 4 条 HTTP-to-RCE 攻击链路,但出于防御考虑未公开完整 payload。Adobe 与 Sansec 的研究共同推动 Dinosn 在 10 月 18 日把基于自己分析的复现环境开源。

三、漏洞机理:两阶段指令走私

漏洞名 BlockStrap 由 “Block” 与 “Strap Smuggling” 合成而来,指模板引擎的 {{block}} 指令通过”签名包装 + 二阶段重扫描”完成了跨越渲染阶段的指令走私。完整链路可拆解为五步:

  1. 匿名客户端通过 createEmptyCart 与 setGuestEmailOnCart 创建购物车与访客邮箱。
  2. 通过 setBillingAddressOnCart 把 {{block ...}} 指令载荷写入可见的 company 字段。
  3. handlePayflowProResponse 收到 declined 响应,触发 PaymentFailuresService 失败通知流程。
  4. 递归地址格式化让子过滤器看不到 {{block}} 的语义,原样返回文本;父引擎对这个”未知指令”做签名包装后存入 billingAddressHtml。
  5. 后续独立渲染阶段的邮件过滤器共享同请求的签名提供者,识别到已签名文本,调用 blockDirective() 实例化 BlockInterface 类,并执行 zero-argument 的 output= 方法。
BlockStrap 两阶段指令注入机理示意图

Adobe 在 APSB26-153 中引入了 DeferredDirectiveRegistry,只有显式登记的指令才会被根引擎解析。嵌套过滤器返回的未识别文本不再被签名包装,因而保持惰性。

四、PoC lab 的四组 A/B 证据

仓库提供四组对照实验,每组都跑 vulnerable 与 patched 两个状态:

组件 A/B 直接调用 Magento 的对象管理器与指令处理器,验证根引擎对子过滤器返回的 {{block}} 做签名包装并执行 Text::getCacheKey(),输出形如 CUSTOM_BLOCK_ 的全新值——这个值不存在于任何输入,只可能是引擎层执行的结果。

未认证 HTTP A/B 用 guest GraphQL 把上述链路打成一次公开请求,结果通过 MailHog 抓取邮件正文中是否出现 CUSTOM_BLOCK_ 来判断。补丁状态下,同样的 HTTP 流程仍然产生邮件但不会出现这个标记。

有界文件副作用 A/B 用 stock MagentoBackendBlockWidgetGridExtended::getCsvFile() 方法,触发写入固定目录的随机命名 CSV,文件内容为固定的 EF BB BF 0A 四个字节。这不是任意文件写入,仅作为服务端副作用的证据。

条件命令执行 A/B 是整个仓库最有意思的部分。它不声称找到了 Sansec 报告里那种 stock Magento 全 RCE 链路,而是诚实标注:命令执行需要先安装仓库作者自己写的 BlockStrapLab_Gadget 模块,该模块执行固定命令 id,不接受外部 shell 文本、输出路径或文件内容。仓库把这种实验称为 “bounded conditional demonstration”,命令执行的前提条件由仓库明确补齐而非从 stock 类中发现。

Dinosn 的 BlockStrap PoC lab 仓库首页

五、下载与快速运行

仓库地址:https://github.com/dinosn/cve-2026-103849-blockstrap-lab,协议 MIT,克隆后即可本地构建。

硬件与系统要求为 amd64 Linux、Docker Engine + Compose v2、8 GB 内存、10–15 GB 空闲磁盘、Python 3.10+ 与 PHP CLI(仅 make verify 使用)。OpenSearch 要求宿主机 vm.max_map_count >= 262144,可以用 sudo sysctl -w vm.max_map_count=262144 临时设置。仓库还提示如果本地 10.210.103.0/24 网段冲突,需要修改 compose.yaml 的 networks.default.ipam 子网。

标准流程只需两条命令:

cp .env.example .env
make full

make full 会先跑静态校验,构建并等待 Docker 栈就绪,然后顺序执行四组 vulnerable/patched 比对。常用子命令包括 make status、make vulnerable、make patched、make http-ab、make file-ab、make http-rce-ab 与 make down / make reset。

安全边界方面,Magento 网关与 MailHog API 都绑定到 127.0.0.1,数据库、Redis、OpenSearch、PHP-FPM 与 SMTP 端口都在私有 Compose 网络里。HTTP RCE 演示只接受一个 fresh nonce 与字面命令 id 2>&1,不接受操作员提供的任何 shell 文本、输出路径或文件内容。

六、给防御方与读者的提醒

仓库本身的诚实声明值得所有读者注意:它没有复现 Sansec 报告中那 4 条 HTTP-to-RCE 链路,也没有发现 stock Magento 类中存在”无需外部 gadget 即可命令执行”的完整链。它的价值在于提供 A/B 框架与可重复的补丁验证流程,让企业蓝队和补丁管理团队可以在不接触真实 exploit 的前提下确认自家系统是否真的修好了。

把它当作攻击工具使用既违法也无必要——验证 Adobe 10 月补丁是否生效,才是这个开源仓库存在的真正意义。建议在隔离的内网跳板或一次性虚拟机中运行,运行结束后执行 make reset 删除容器与卷,避免任何实验痕迹泄漏到生产环境。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容