嵌套反序列化的危害:Magento XXE 漏洞分析(CVE-2024-34102)
字数 1359 2025-08-20 18:17:07
Magento XXE漏洞分析(CVE-2024-34102)技术文档
1. 漏洞概述
CVE-2024-34102是Adobe Commerce/Magento中存在的一个严重的未经认证的XML实体注入(XXE)漏洞,CVSS评分高达9.8。该漏洞允许攻击者通过反序列化过程中的XML处理不当,实现敏感信息泄露甚至远程代码执行。
2. 漏洞影响
2.1 受影响版本
- Magento 2.4.7及之前版本
- Adobe Commerce对应版本
2.2 危害程度
- 敏感信息泄露:可提取
app/etc/env.php文件,获取用于签署JWT的加密密钥 - 权限提升:伪造管理员JWT,滥用Magento API
- 远程代码执行:结合PHP过滤器链(CVE-2024-2961)可实现RCE
- 任意文件读取:通过XXE可读取服务器上任意文件或远程URL内容
3. 技术分析
3.1 漏洞根源
漏洞源于Magento在处理反序列化数据时,未正确限制SimpleXMLElement类的实例化参数,特别是sourceData参数的使用。
3.2 关键代码分析
在未打补丁的Magento 2.4.7版本中,存在以下问题点:
// 漏洞点:未对SimpleXMLElement的sourceData参数进行过滤
$xml = new SimpleXMLElement($untrustedInput, LIBXML_NOENT, false, 'sourceData');
3.3 补丁分析
在2.4.7-p1版本中,主要修复措施包括:
- 限制
sourceData关键字的使用 - 加强XML解析时的输入验证
- 禁用外部实体加载
4. 漏洞利用
4.1 利用条件
- 目标系统运行受影响版本的Magento
- 存在反序列化入口点
- 服务器允许外部实体加载(默认配置)
4.2 利用步骤
4.2.1 信息泄露利用
- 构造恶意XML payload:
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///app/etc/env.php">
]>
<root>&xxe;</root>
- 通过反序列化链触发XML解析
- 获取包含加密密钥的配置文件内容
4.2.2 JWT伪造
- 从env.php中提取
crypt/key值 - 使用该密钥生成管理员令牌
- 通过API执行特权操作
4.2.3 远程代码执行(结合CVE-2024-2961)
- 利用XXE读取PHP文件
- 结合PHP过滤器链构造恶意序列化数据
- 触发反序列化实现RCE
5. 环境搭建与验证
5.1 测试环境搭建
# 使用Docker搭建漏洞环境
./scripts/composer create-project --repository-url=https://repo.magento.com/magento/project-community-edition=2.4.7 /home/magento
# 安装Magento
./scripts/magento setup:install \
--base-url=http://magento2.test/ \
--db-host=mysql \
--db-name=magento_db \
--db-user=magento_user \
--db-password="PASSWD#" \
--admin-firstname=admin \
--admin-lastname=admin \
--admin-email=admin@admin.test \
--admin-user=admin \
--admin-password=admin1! \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1 \
--search-engine opensearch \
--opensearch-host=opensearch \
--opensearch-port=9200
# 安装示例数据
./scripts/magento sampledata:deploy
./scripts/magento setup:upgrade
5.2 调试配置
建议使用XDebug配合PhpStorm进行调试:
- 配置Docker容器启用XDebug
- 在PhpStorm中设置远程调试
- 在
SimpleXMLElement实例化处设置断点
6. 防护措施
6.1 官方修复
- 升级到Magento 2.4.7-p1或更高版本
- 应用Adobe发布的安全补丁
6.2 临时缓解方案
- 禁用PHP的外部实体加载:
libxml_disable_entity_loader(true);
- 在服务器配置中限制XML解析功能:
location ~ \.php$ {
fastcgi_param PHP_ADMIN_VALUE "libxml_disable_entity_loader=On";
}
- 加强输入验证,特别是反序列化操作
- 限制文件系统访问权限
7. 参考资源
- Adobe安全公告:https://helpx.adobe.com/security/products/magento/apsb24-29.html
- Magento GitHub仓库:https://github.com/magento/magento2
- CVE-2024-2961相关研究
8. 总结
CVE-2024-34102是一个高危的XXE漏洞,结合Magento的反序列化机制可导致严重后果。开发者和运维人员应立即采取行动修补系统,同时加强XML处理的输入验证和安全配置。