Magento 2.3.1 :组合拳拿远程代码执行权限
字数 1416 2025-08-27 12:33:31
Magento 2.3.1 组合漏洞利用分析:从XSS到远程代码执行
0x01 漏洞概述
本漏洞组合链影响Magento电子商务系统,通过结合HTML注入和Phar反序列化漏洞,攻击者可实现远程代码执行。漏洞影响范围包括:
-
受影响版本:
- 2.3分支:≤2.3.1
- 2.2分支:≤2.2.8
- 2.1分支:≤2.1.17
-
修补版本:
- 2.3.2
- 2.2.9
- 2.1.18
-
必要条件:目标系统需启用Authorize.Net支付模块
0x02 漏洞影响
攻击者可利用此漏洞链:
- 通过储存型XSS获取管理员会话
- 利用后台功能实现Phar反序列化
- 最终获取服务器远程代码执行权限
潜在危害包括:
- 接管Magento商店
- 重定向支付页面
- 窃取客户银行卡信息
- 破坏公司财务运营
0x03 漏洞分析
3.1 储存型XSS漏洞
漏洞位置
订单取消备注功能中的escapeHtmlWithLinks()方法
漏洞原理
escapeHtmlWithLinks()方法设计用于安全处理包含链接的HTML文本- 方法将
<a>标签替换为占位符%$is,然后进行HTML转义 - 最后使用
vsprintf()将处理后的链接重新插入 - 由于处理顺序不当,导致可注入任意JavaScript代码
绕过分析
原始输入:
<i id=" <a href='http://onmouseover=alert(/XSS/)'>a link</a> "> a malicious link </i>
处理过程:
- 提取
<a>标签并替换为%1s:<i id=" %1s "> a malicious link </i> - 进行HTML转义(认为
%1s是安全的) - 使用
vsprintf()重新插入处理后的<a>标签:<i id=" <a href="http://onmouseover=alert(/XSS/)>">a link</a> "> a malicious link </i>
导致注入的onmouseover事件被执行。
3.2 Phar反序列化漏洞
漏洞位置
WYSIWYG编辑器中的图片处理控制器
漏洞原理
- 攻击者通过管理员权限访问后台
- 向图片处理功能提交包含
phar://包装器的恶意参数 - 参数传递给
getimagesize()函数 - 触发Phar反序列化,导致远程代码执行
关键代码:
$directive = $this->getRequest()->getParam('___directive');
$directive = $this->urlDecoder->decode($directive);
$image->open($imagePath); // 可传入phar://路径
0x04 漏洞利用链
完整攻击流程:
-
初始访问:
- 攻击者提交包含恶意JavaScript的订单取消备注
- 利用
escapeHtmlWithLinks()方法的缺陷注入XSS Payload
-
权限提升:
- 管理员查看订单时触发XSS
- 窃取管理员会话cookie或直接执行恶意操作
-
远程代码执行:
- 使用管理员权限访问WYSIWYG编辑器
- 通过图片上传功能触发Phar反序列化
- 执行系统命令,获取服务器控制权
0x05 防护措施
临时缓解方案
- 禁用Authorize.Net支付模块
- 限制订单备注功能的使用权限
- 监控可疑的管理员会话活动
永久修复方案
-
升级到最新修补版本:
- 2.3.2+
- 2.2.9+
- 2.1.18+
-
代码层修复:
- 修改
escapeHtmlWithLinks()方法的安全处理逻辑 - 对用户输入进行更严格的过滤
- 禁用不必要的PHP流包装器
- 修改
0x06 时间线
- 2018/9/25:首次报告XSS漏洞
- 2018/11/28:发布初步补丁
- 2019/1/11:报告Phar反序列化漏洞
- 2019/3/26:发布包含部分修复的版本
- 2019/6/25:发布完整修复版本
0x07 总结
此漏洞链展示了现代Web应用安全中的典型问题:
- 输入过滤不彻底导致的XSS
- 权限控制不严导致的前后台跨越
- 危险函数使用导致的RCE
管理员应立即升级到最新版本,并审查系统配置,特别是支付模块的使用情况。开发者应重视安全编码实践,避免类似漏洞的出现。