针对 CVE-2022-24086、CVE-2022-24087 的 Magento 2 补丁。通过执行深度模板变量转义来修复 RCE 漏洞及相关的错误。如果您无法升级 Magento,或者无法应用官方补丁,请尝试这个。
CVE-2022-24086(以及 CVE-2022-24087) 于 2022 年初被发现。
受影响的商店均存在此远程代码执行(RCE)漏洞,且没有变通方案。2022 年 2 月发布了 2 个官方独立补丁。
然而,即使在 2024 年底,我们仍会收到有关此问题的咨询,并确认他们被入侵的商店正是该漏洞被利用所致。观察到的攻击方式是输入一个包含 template directive 的字符串。通常利用结账流程,或利用可触发发送带有用户可控字段的电子邮件的操作等。
鉴于这种广泛存在的攻击,以及部分商店仍难以升级到不受影响的版本或应用这两个官方补丁,我们制作了这个补丁。
在将此补丁制作为扩展时,我们始终将兼容性放在首位。它主要在 Magento 2.4 系列上进行了测试。
尽管官方文档声明“无论是从 var 指令的变量中,还是作为参数使用时,都无法再调用方法”,但据我们确认,即使在最新版本(2.4.7-p3)中,仍然允许在 Data Object 上调用“Getter”方法,以及在 Email Template Object(\Magento\Email\Model\AbstractTemplate)上调用 getUrl 方法。
此补丁(扩展)也保留了上述功能。因此 {{var data_object.something}} 和 {{var data_object.getSomething()}} 都是可行的,且二者等价。
getUrl 示例:
{{var this.getUrl($store,'route_id/controller/action',[_query:[param1:$obj.param1,param2:$obj.param2],_nosid:1])}}
总之,安装此扩展后:
\Magento\Framework\DataObject 或其子实例的对象\Magento\Framework\DataObject 及其子实例上调用“Getter”方法getUrl 方法仅在 this 上有效移除了 LegacyResolver 以阻止 RCE。
为子模板引入了“带签名的延迟指令”。我们不确定它是否具有任何安全增强作用。
仍有一个未修复的错误(#39353)。
在模板过滤过程之前使用“深度模板变量转义”。LegacyResolver 只会收到已转义的用户数据,因此可以保留。
Magento 2.3 或 2.4
composer require wubinworks/module-template-filter-patch
如果您喜欢此扩展,或者它帮助到了您,请为这个仓库★star☆。
您可能还喜欢:
适用于 CVE-2024-34102(又名 Cosmic Sting)的 Magento 2 补丁
Magento 2 增强型 XML 安全
Magento 2 加密密钥管理器 CLI
Magento 2 JWT 认证补丁