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。
漏洞利用链分析
-
请求处理流程:
- HTTP请求首先由
BaseWSServlet的service方法处理 - 通过
AuthorizedInvoke的run()方法进行权限验证 - 进入
SoapProcessor的process方法处理POST请求
- HTTP请求首先由
-
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); } -
关键反序列化点:
WorkAreaServerHandler处理请求,通过WorkContextXmlInputAdapter读取XMLreadUTF()方法调用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命令检测:
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>
四、防护措施
官方修复方案
- 安装官方补丁:
- 下载地址:https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2725-5466295.html
临时解决方案
-
升级JDK版本:
- 升级到JDK 7u21以上版本
-
URL访问控制:
- 配置ACL禁止访问以下路径:
/_async/*/wls-wsat/*
- 配置ACL禁止访问以下路径:
-
删除不安全文件:
-
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类的反序列化机制。建议所有使用受影响版本的用户立即采取防护措施,优先安装官方补丁,同时加强系统监控,防范可能的攻击行为。