专栏首页数据和云紧急预警:wls9_async_response.war组件漏洞的延续

紧急预警:wls9_async_response.war组件漏洞的延续

墨墨导读:2019 年 6 月 19 日,Oracle 官方正式发出通告,weblogic 存在一个最新的高位漏洞 cve-2019-2729。此漏洞来源于 OracleWebLogicServer 的 WebServices 组件,分值达到 9.8。

1. 问题跟踪


2019 年 6 月 19 日,Oracle 官方正式发出通告,weblogic 存在一个最新的高位漏洞 cve-2019-2729。此漏洞来源于 OracleWebLogicServer 的 WebServices 组件,分值达到 9.8。 (简单说利用反序列化漏洞在不需要用户、密码的情况下远程攻击运行的 weblogicserver)。 其实在6月16日,国内不少安全厂商就已经反馈此漏洞,此漏洞根源在于oraclecve-2019-2725 修复不彻底,应用了 cve-2019-2725 补丁后,仍然被绕过。

建议重点修复那种架构简单,外网直接访问 weblogic 的应用。 https://www.oracle.com/technetwork/security-advisory/alert-cve-2019-2729-5570780.html

重新定义漏洞为 CVE-2019-2729

2. 分析及发现


总的来说就是每一个 weblogicserver 实例都会发布一个内部的异步 webservice 应用 (bea_wls9_async_response.war),该服务处理异步请求响应功能。但可以使用参数禁用它。

2.1 Disabling The Internal Asynchronous Service

By default, every WebLogic Server instance deploys an internal asynchronous Web Service that handes the asynchronous request-response feature. To specify that you do not want to deploy this internal service, start the WebLogic Server instance using the -Dweblogic.wsee.skip.async.response=true Java system property. One reason for disabling the asynchronous service is if you use a WebLogic Server instance as a Web proxy to a WebLogic cluster. In this case, asynchronous messages will never get to the cluster, as required, because the asynchronous service on the proxy server consumes them instead. For this reason, you must disable the asynchronous service on the proxy server using the system property.

漏洞排查:

http://ip:port/_async/AsyncResponseService

什么样的应用可以禁用?

如果确认本 domain 没有使用异步 webservices,那么完全可以禁用这个组件

使用 weblogic 异步 webservices 示例:

如何确认

一般会引起下面三个 weblogic 自带的 class

importweblogic.wsee.async.AsyncPreCallContext; importweblogic.wsee.async.AsyncCallContextFactory; importweblogic.wsee.async.AsyncPostCallContext;

packageexamples.webservices.async_req_res;
importweblogic.jws.WLHttpTransport; importweblogic.jws.ServiceClient; importweblogic.jws.AsyncResponse; importweblogic.jws.AsyncFailure;
importweblogic.wsee.async.AsyncPreCallContext; importweblogic.wsee.async.AsyncCallContextFactory; importweblogic.wsee.async.AsyncPostCallContext;
importjavax.jws.WebService; importjavax.jws.WebMethod;
importexamples.webservices.async_req_res.StockQuotePortType;
importjava.rmi.RemoteException;
@WebService(name="StockQuoteClientPortType", serviceName="StockQuoteClientService", targetNamespace="http://examples.org/")
@WLHttpTransport(contextPath="asyncClient", serviceUri="StockQuoteClient",
云和恩墨 成就所托 www.enmotech.com
http://www.enmotech.com 实力成就稳健 技术创造价值 -6
portName="StockQuoteClientServicePort")
/** * ClientWebServicethatinvokestheStockQuoteServiceasynchronously. */
publicclassStockQuoteClientImpl{
@ServiceClient(wsdlLocation="http://localhost:7001/async/StockQuote?WSDL", serviceName="StockQuoteService",portName="StockQuote")
privateStockQuotePortTypeport;
@WebMethod publicvoidasyncOperation(Stringsymbol,StringuserName) throwsRemoteException{
AsyncPreCallContextapc=AsyncCallContextFactory.getAsyncPreCallContext(); apc.setProperty("userName",userName);
try{ port.getQuoteAsync(apc,symbol); System.out.println("ingetQuotemethodofStockQuoteClientWS");
}catch(RemoteExceptionre){
System.out.println("RemoteExceptionthrown"); thrownewRuntimeException(re);
}
}
@AsyncResponse(target="port",operation="getQuote") publicvoidonGetQuoteAsyncResponse(AsyncPostCallContextapc,intquote){ //GettheuserNameproperty wesetonAsyncPreCallContext StringuserName=(String)apc.getProperty("userName"); System.out.println("-------------------"); System.out.println(username+"Gotquote"+quote); System.out.println("-------------------"); }
@AsyncFailure(target="port",operation="getQuote") publicvoidonGetQuoteAsyncFailure(AsyncPostCallContextapc,Throwablee){ System.out.println("-------------------"); e.printStackTrace();
云和恩墨 成就所托 www.enmotech.com
http://www.enmotech.com 实力成就稳健 技术创造价值 -7
System.out.println("-------------------");
}
}

3. 影响范围


Weblogic: 9.2~12213(重点是外网直接访问 weblogic 的应用) 参考文档:

9.2

https://docs.oracle.com/cd/E13222_01/wls/docs92/webserv/advanced.html#wp265081

1221

https://docs.oracle.com/middleware/1221/wls/WSRPC/jax-rpc-async.htm#WSRPC317

各版本错误纠正日期说明:

ErrorCorrectionSupportDatesforOracleWebLogicServer(文档 ID950131.1) 注意:举例说官方指出影响 12.2.1.3 版本,实际是影响 12.2.*版本,即影响 12.2 的所有版本,只 是因为这几个版本已经过了错误纠正日期。没有对应补丁而已。

4. 整改建议


3.1 添加-Dweblogic.wsee.skip.async.response=true

在启动脚本中添加上面参数,可以禁用此组件

示例:

调整前效果:

调整后效果: 组件访问被禁用

3.2 删除此 war 包

示例如下:

find.-namebea_wls9_async_response.war

3.3 防火墙、负载均衡器实施限制

禁止访问带有这种/_async 上下文根

3.4 打补丁 4 月 27 日官方发布补丁已经失效,请使用 2019-6-19 新发布补丁进行修复。 SecurityAlertCVE-2019-2729PatchAvailabilityDocumentforOracleWebLogicServer(文档 ID 2555019.1)

如果已经应用 cve-2019-2725 的补丁,必须先卸载后,才能应用 cve-2019-2729 补丁。 鉴于已有先例,彻底的解决方案使用 3.1 、3.2 、3.3。

3.5 附录

附:早期wls-wsat组件漏洞仍存在安全风险,如果http://ip_address:port/wls-wsat/CoordinatorPortType 可以访问,那么建议从防火墙、负载均衡器禁止访问带有这种/wls-wsat 上下文根、或者删除 示例如下:

find.-name*wsat* /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.in ternal/wls-wsat.war /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_ WL_internal/wls-wsat

12.2.1.0 及以后此功能已经禁用

5. 参考


  • WarningMessageonJMScomponentsintheConsole(DocID1347384.1)
  • https://docs.oracle.com/cd/E13222_01/wls/docs92/webserv/advanced.html#wp265081
  • https://docs.oracle.com/middleware/1221/wls/WSRPC/jax-rpc-async.htm#WSRPC307
  • https://docs.oracle.com/cd/E23943_01/web.1111/e13735/asynch.htm#WSRPA117

原创:刘韬,云和恩墨中间件服务交付团队专家,在中间件领域有多年的实战经验,精通 WebLogic server,Websphere,Jboss,Tomcat,tuxedo,mq,osb等多种中间件技术,对中间件的故障处理、性能优化、升级迁移等需求积累了丰富经验。

编辑:尹文敏

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2018DTC,2018 DTC 大会 PPT

ENMOBK,《Oracle性能优化与诊断案例》

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2018OOW ,Oracle OpenWorld 资料

产品推荐

云和恩墨Bethune Pro2 企业版,集监控、巡检、安全于一身,你的专属数据库实时监控和智能巡检平台,漂亮的不像实力派,你值得拥有!

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布欢迎关注。

本文分享自微信公众号 - 数据和云(OraNews)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何使用 RxJS 更优雅地进行定时请求

    实际的业务场景是这样的:前端需要轮循请求后端接口获取文件处理进度,并在前端用进度条展示。如下方所示:

    叙帝利
  • 深入浅出parallelStream

    今天小强带来java8的Stream,Stream是java8中新增加的一个特性,被java猿统称为流。

    程序员小强
  • 字符串 | Python

    注意:和split( )的区别在于,split( )返回的是列表,partition( )返回的是集合。

    数据医生
  • 建站者必须知道的常见网络安全攻防知识

    beifengtz
  • for 、foreach 、iterator 三种遍历方式的比较

    for、foreach循环、iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组、集合等

    cxuan
  • 一条命通关,这个AI算法玩超级马里奥操作秀翻天丨视频+开源代码

    从1-1到7-1,只要一条命,就能全部通过,而且操作几乎没有迟疑,如行云流水一般。

    量子位
  • 搞定笔试 | 搞定笔试题 - 第 001 期

    字典是可变类型,这里l.append(a)相当于执行了浅拷贝,每改变一次a中num的值,所有a的值都将改变

    咸鱼学Python
  • JS 数组中你或许不知道的操作

    1.定义 numberOfArgs 为传递给此函数的调用的实参数量; 2.断言:numberOfArgs 为1; 3.如果 NewTarget 为 undefi...

    小生方勤
  • LeetCode - 003

    https://leetcode.com/problems/longest-substring-without-repeating-characters/des...

    咸鱼学Python
  • 用CSS Grid Shepherd技术对数据进行排序[每日前端夜话0x7B]

    牧羊人很擅长照顾他们的羊群,为牧群带来秩序和结构。即使有几百只毛茸茸的动物,牧羊人仍然会在一天结束时将它们悉数带回农场。

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券