嵌套反序列化的危害: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版本中,主要修复措施包括:

  1. 限制sourceData关键字的使用
  2. 加强XML解析时的输入验证
  3. 禁用外部实体加载

4. 漏洞利用

4.1 利用条件

  • 目标系统运行受影响版本的Magento
  • 存在反序列化入口点
  • 服务器允许外部实体加载(默认配置)

4.2 利用步骤

4.2.1 信息泄露利用

  1. 构造恶意XML payload:
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///app/etc/env.php">
]>
<root>&xxe;</root>
  1. 通过反序列化链触发XML解析
  2. 获取包含加密密钥的配置文件内容

4.2.2 JWT伪造

  1. 从env.php中提取crypt/key
  2. 使用该密钥生成管理员令牌
  3. 通过API执行特权操作

4.2.3 远程代码执行(结合CVE-2024-2961)

  1. 利用XXE读取PHP文件
  2. 结合PHP过滤器链构造恶意序列化数据
  3. 触发反序列化实现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进行调试:

  1. 配置Docker容器启用XDebug
  2. 在PhpStorm中设置远程调试
  3. SimpleXMLElement实例化处设置断点

6. 防护措施

6.1 官方修复

  • 升级到Magento 2.4.7-p1或更高版本
  • 应用Adobe发布的安全补丁

6.2 临时缓解方案

  1. 禁用PHP的外部实体加载:
libxml_disable_entity_loader(true);
  1. 在服务器配置中限制XML解析功能:
location ~ \.php$ {
    fastcgi_param PHP_ADMIN_VALUE "libxml_disable_entity_loader=On";
}
  1. 加强输入验证,特别是反序列化操作
  2. 限制文件系统访问权限

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处理的输入验证和安全配置。

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版本中,存在以下问题点: 3.3 补丁分析 在2.4.7-p1版本中,主要修复措施包括: 限制 sourceData 关键字的使用 加强XML解析时的输入验证 禁用外部实体加载 4. 漏洞利用 4.1 利用条件 目标系统运行受影响版本的Magento 存在反序列化入口点 服务器允许外部实体加载(默认配置) 4.2 利用步骤 4.2.1 信息泄露利用 构造恶意XML payload: 通过反序列化链触发XML解析 获取包含加密密钥的配置文件内容 4.2.2 JWT伪造 从env.php中提取 crypt/key 值 使用该密钥生成管理员令牌 通过API执行特权操作 4.2.3 远程代码执行(结合CVE-2024-2961) 利用XXE读取PHP文件 结合PHP过滤器链构造恶意序列化数据 触发反序列化实现RCE 5. 环境搭建与验证 5.1 测试环境搭建 5.2 调试配置 建议使用XDebug配合PhpStorm进行调试: 配置Docker容器启用XDebug 在PhpStorm中设置远程调试 在 SimpleXMLElement 实例化处设置断点 6. 防护措施 6.1 官方修复 升级到Magento 2.4.7-p1或更高版本 应用Adobe发布的安全补丁 6.2 临时缓解方案 禁用PHP的外部实体加载: 在服务器配置中限制XML解析功能: 加强输入验证,特别是反序列化操作 限制文件系统访问权限 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处理的输入验证和安全配置。