Weblogic反序列化远程代码执行漏洞(CVE-2019-2725)分析报告
字数 2662 2025-08-18 11:38:31

WebLogic反序列化远程代码执行漏洞(CVE-2019-2725)深度分析与防护指南

一、漏洞概述

漏洞编号:CVE-2019-2725 (CNVD-C-2019-48814)
漏洞类型:反序列化远程代码执行
威胁等级:高危
披露时间:2019年4月17日
补丁发布时间:2019年4月26日

受影响版本

  • Oracle WebLogic Server 10.*
  • Oracle WebLogic Server 12.1.3

受影响组件

  • bea_wls9_async_response.war
  • wsat.war

二、漏洞技术分析

漏洞原理

该漏洞存在于WebLogic的异步通讯服务中,攻击者可以通过发送精心构造的恶意HTTP请求,利用反序列化缺陷在服务器上执行任意代码。漏洞利用路径为/_async/AsyncResponseService

漏洞利用链分析

  1. 请求处理流程

    • HTTP请求首先由BaseWSServletservice方法处理
    • 通过AuthorizedInvokerun()方法进行权限验证
    • 进入SoapProcessorprocess方法处理POST请求
  2. SOAP消息解析

    private void handlePost(BaseWSServlet var1, HttpServletRequest var2, HttpServletResponse var3) throws IOException {
        WsPort var4 = var1.getPort();
        String var5 = var4.getWsdlPort().getBinding().getBindingType();
        HttpServerTransport var6 = new HttpServerTransport(var2, var3);
        WsSkel var7 = (WsSkel)var4.getEndpoint();
        Connection var8 = ConnectionFactory.instance().createServerConnection(var6, var5);
        var7.invoke(var8, var4);
    }
    
  3. 关键反序列化点

    • WorkAreaServerHandler处理请求,通过WorkContextXmlInputAdapter读取XML
    • readUTF()方法调用xmlDecoder.readObject()进行反序列化
    • 最终解析获取类名oracle.toplink.internal.sessions.UnitOfWorkChangeSet
  4. 恶意代码执行

    • 利用反射机制实例化UnitOfWorkChangeSet
    • 通过ByteArrayInputStreamObjectInputStream读取恶意序列化对象
    • 调用readObject()触发反序列化漏洞
    • 最终通过ProcessBuilder执行任意命令

补丁绕过机制

该漏洞成功绕过了之前针对CVE-2017-3506和CVE-2017-10271的补丁:

  1. 绕过CVE-2017-3506补丁

    • 原补丁仅检测"object"元素
    • 新POC使用<java>标签而非<object>标签
  2. 绕过CVE-2017-10271补丁

    • 补丁黑名单包含object、new、method元素
    • 新利用链使用Class元素指定类名
    • 利用void元素带index属性
    • 使用array元素且class属性为byte

三、漏洞验证与检测

检测方法

  1. 检查目标是否存在以下路径:

    • /_async/AsyncResponseService
    • /wls-wsat/CoordinatorPortType
  2. 使用以下curl命令检测:

    curl -v http://target:7001/_async/AsyncResponseService
    

漏洞验证POC

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.4.0" class="java.beans.XMLDecoder">
        <void class="oracle.toplink.internal.sessions.UnitOfWorkChangeSet">
          <void method="getDeletedObjects">
            <array class="byte" length="3">
              <void index="0">
                <byte>1</byte>
              </void>
              <void index="1">
                <byte>2</byte>
              </void>
              <void index="2">
                <byte>3</byte>
              </void>
            </array>
          </void>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

四、防护措施

官方修复方案

  1. 安装官方补丁
    • 下载地址:https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2725-5466295.html

临时解决方案

  1. 升级JDK版本

    • 升级到JDK 7u21以上版本
  2. URL访问控制

    • 配置ACL禁止访问以下路径:
      • /_async/*
      • /wls-wsat/*
  3. 删除不安全文件

    • 10.3.*版本

      • \Middleware\wlserver_10.3\server\lib\bea_wls9_async_response.war
      • \Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response
      • \Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\.internal\bea_wls9_async_response.war
    • 12.1.3版本

      • \Oracle\Middleware\wlserver_12.1\server\lib\bea_wls9_async_response.war
      • \Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\.internal\bea_wls9_async_response.war
      • \Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response
    • 删除后需重启WebLogic服务

注意:直接删除这些文件可能导致未知问题,Oracle官方不建议此操作。如需删除,请先备份。

五、深度防护建议

  1. 网络层防护

    • 在防火墙或WAF上配置规则,拦截恶意SOAP请求
    • 限制访问WebLogic管理端口的源IP
  2. 应用层防护

    • 启用WebLogic的安全管理器
    • 配置JAVA安全策略文件限制敏感操作
  3. 监控与审计

    • 监控对/_async/AsyncResponseService的访问
    • 审计WebLogic日志中的异常反序列化操作

六、参考资源

  1. CNVD漏洞公告:http://www.cnvd.org.cn/webinfo/show/4999
  2. Oracle安全公告:https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2725-5466295.html
  3. F5技术分析:https://devcentral.f5.com/articles/oracle-weblogic-deserialization-remote-code-execution-34185

七、总结

CVE-2019-2725是WebLogic中一个严重的反序列化漏洞,攻击者无需认证即可实现远程代码执行。该漏洞成功绕过了之前的安全补丁,利用了UnitOfWorkChangeSet类的反序列化机制。建议所有使用受影响版本的用户立即采取防护措施,优先安装官方补丁,同时加强系统监控,防范可能的攻击行为。

WebLogic反序列化远程代码执行漏洞(CVE-2019-2725)深度分析与防护指南 一、漏洞概述 漏洞编号 :CVE-2019-2725 (CNVD-C-2019-48814) 漏洞类型 :反序列化远程代码执行 威胁等级 :高危 披露时间 :2019年4月17日 补丁发布时间 :2019年4月26日 受影响版本 Oracle WebLogic Server 10.* Oracle WebLogic Server 12.1.3 受影响组件 bea_ wls9_ async_ response.war wsat.war 二、漏洞技术分析 漏洞原理 该漏洞存在于WebLogic的异步通讯服务中,攻击者可以通过发送精心构造的恶意HTTP请求,利用反序列化缺陷在服务器上执行任意代码。漏洞利用路径为 /_async/AsyncResponseService 。 漏洞利用链分析 请求处理流程 : HTTP请求首先由 BaseWSServlet 的 service 方法处理 通过 AuthorizedInvoke 的 run() 方法进行权限验证 进入 SoapProcessor 的 process 方法处理POST请求 SOAP消息解析 : 关键反序列化点 : WorkAreaServerHandler 处理请求,通过 WorkContextXmlInputAdapter 读取XML readUTF() 方法调用 xmlDecoder.readObject() 进行反序列化 最终解析获取类名 oracle.toplink.internal.sessions.UnitOfWorkChangeSet 恶意代码执行 : 利用反射机制实例化 UnitOfWorkChangeSet 类 通过 ByteArrayInputStream 和 ObjectInputStream 读取恶意序列化对象 调用 readObject() 触发反序列化漏洞 最终通过 ProcessBuilder 执行任意命令 补丁绕过机制 该漏洞成功绕过了之前针对CVE-2017-3506和CVE-2017-10271的补丁: 绕过CVE-2017-3506补丁 : 原补丁仅检测"object"元素 新POC使用 <java> 标签而非 <object> 标签 绕过CVE-2017-10271补丁 : 补丁黑名单包含object、new、method元素 新利用链使用 Class 元素指定类名 利用 void 元素带 index 属性 使用 array 元素且 class 属性为 byte 三、漏洞验证与检测 检测方法 检查目标是否存在以下路径: /_async/AsyncResponseService /wls-wsat/CoordinatorPortType 使用以下curl命令检测: 漏洞验证POC 四、防护措施 官方修复方案 安装官方补丁 : 下载地址:https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2725-5466295.html 临时解决方案 升级JDK版本 : 升级到JDK 7u21以上版本 URL访问控制 : 配置ACL禁止访问以下路径: /_async/* /wls-wsat/* 删除不安全文件 : 10.3.* 版本 : \Middleware\wlserver_10.3\server\lib\bea_wls9_async_response.war \Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response \Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\.internal\bea_wls9_async_response.war 12.1.3版本 : \Oracle\Middleware\wlserver_12.1\server\lib\bea_wls9_async_response.war \Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\.internal\bea_wls9_async_response.war \Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response 删除后需重启WebLogic服务 注意 :直接删除这些文件可能导致未知问题,Oracle官方不建议此操作。如需删除,请先备份。 五、深度防护建议 网络层防护 : 在防火墙或WAF上配置规则,拦截恶意SOAP请求 限制访问WebLogic管理端口的源IP 应用层防护 : 启用WebLogic的安全管理器 配置JAVA安全策略文件限制敏感操作 监控与审计 : 监控对 /_async/AsyncResponseService 的访问 审计WebLogic日志中的异常反序列化操作 六、参考资源 CNVD漏洞公告:http://www.cnvd.org.cn/webinfo/show/4999 Oracle安全公告:https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2725-5466295.html F5技术分析:https://devcentral.f5.com/articles/oracle-weblogic-deserialization-remote-code-execution-34185 七、总结 CVE-2019-2725是WebLogic中一个严重的反序列化漏洞,攻击者无需认证即可实现远程代码执行。该漏洞成功绕过了之前的安全补丁,利用了 UnitOfWorkChangeSet 类的反序列化机制。建议所有使用受影响版本的用户立即采取防护措施,优先安装官方补丁,同时加强系统监控,防范可能的攻击行为。