项目介绍
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
漏洞描述
WebLogic存在远程代码执行漏洞,该漏洞允许未经身份验证的远程攻击者通过T3/IIOP协议网络访问并破坏易受攻击的WebLogic服务器,成功利用此漏洞可能导致Oracle WebLogic服务器被接管或敏感信息泄露。漏洞原理其实是通过Weblogic t3/iiop协议支持远程绑定对象bind到服务端,当远程对象继承自OpaqueReference时,lookup查看远程对象时,服务端调用远程对象getReferent方法,其中的remoteJNDIName参数可控,导致攻击者可利用rmi/ldap远程协议进行远程命令执行。
利用范围
Oracle WebLogic Server 14.1.1.0.0
漏洞分析
环境搭建
新建JAVA项目,导入生成的wlfullclient.jar
POC如下图所示:
动态分析
漏洞利用类之一:weblogic.deployment.jms.ForeignOpaqueReference
而QpaqueReference在官方文档中提示了当实现此接口的对象从 WLContext 中检索(通过查找或 listBindings)时,由 getReferent() 返回对象。
其实就也明白了为什么在POC中远程绑定了ForeignOpaqueReference对象,实际是因为ForeignOpaqueReference继承QpaqueReference,在远程查询该对象的时候,调用的将会是ForeignOpaqueReference.getReferent方法。
在后续的进行lookup操作之前会检查 JNDI 环境是否已正确配置以访问远程资源,主要是对jndiEnvironment和remoteJNDIName的检测,如果在if中的任何一个条件为真,那么将调用对象的lookup方法,如果 if 语句中的所有条件都为假,则会进入检查cachedReferent字段的阶段。结合上面方框的代码其实可以发现,只要this.jndiEnvironment不为空,就可以对InitialContext进行初始化,this.jndiEnvironment也可以使用反射的方式进行赋值。
通过retVal = context.lookup(evalMacros(this.remoteJNDIName))的实现,便可以利用rmi/ldap远程协议进行命令执行。
ClusteravleRemoteRef.invoke
后续调试其实发现已经远程获取并加载了恶意类。
并成功利用ldap协议进行远程命令执行。
在weblogic.jndi.internal.ForeignOpaqueReference这个类下同样可以利用IIOP协议实现JNDI注入。
漏洞复现
漏洞建议
3、通过关闭IIOP协议来阻断利用IIOP协议的漏洞攻击。
参考材料
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。