jdk8或许也要告别JNDI利用了

admin 2026-01-11 01:05:33 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章梳理JDK对JNDI利用的修复历史,指出安全加固已覆盖JDK8。OpenJDK8u432及OracleJDK8u461起禁止LDAP反序列化,OracleJDK8u471起限制第三方ObjectFactory。这将显著增加JDK8环境下JNDI注入利用难度,传统攻击载荷将失效。 综合评分: 89 文章分类: 漏洞分析,漏洞预警,WEB安全


cover_image

jdk8或许也要告别JNDI利用了

原创

珂字辈

珂技知识分享

2026年1月10日 09:00 湖北

一,前言

关于java漏洞的利用,无论是原生反序列化,fastjson反序列化,yaml反序列化,xml反序列化,log4j2,jdbc,SSTI等等,都有可能转到JNDI上进一步利用。

为此ldap/rmi协议利用工具百花齐放,从远程类加载到反序列化绕过到ObjectFactory绕过,一个又一个议题被抛出来供安全研究。

为此java也做出了几次重大更新,在我以前的文章提到过。

最近跟jdbc有关的新知识——ldap篇

jdk17对java安全的影响

二,JNDI修复历史

第一个重大更新,也是最为人熟知的防止远程类加载(俗称JNDI注入)的开关。

于8u121/7u131/6u141引入

com.sun.jndi.rmi.object.trustURLCodebase=false

防止rmi协议加载远程类。

这次补丁也比较出名叫做JEP 290,同时还引入了ObjectInputFilter以支持反序列化过滤器,并以此来对rmi协议中存在反序列化的地方进行过滤。

比如DGCImpl/RegistryImpl/SingleEntryRegistry等类,它们都有各自实现的ObjectInputFilter。但也产生了两次bypass分别于8u121-8u231和8u231-8u241。

于11.0.1/8u191/7u201/6u211引入

com.sun.jndi.ldap.object.trustURLCodebase=false

防止ldap协议加载远程类。

这也是为什么基本大家都爱用ldap协议工具的原因,除了基本覆盖rmi协议的各种利用之外,它的修复也稍微迟一点。

这次修复之后JNDI的利用基本都需要bypass,也就是反序列化和ObjectFactory。

第二个重大更新,防止ldap协议反序列化的开关。

于jdk11引入(默认为true不影响反序列化利用)

com.sun.jndi.ldap.object.trustSerialData=true

于jdk20默认为false

com.sun.jndi.ldap.object.trustSerialData=false

自此,绝大部分的JNDI 反序列化 bypass都无法使用,甚至还波及了ldap协议中的部分ObjectFactory bypass。详情见前文。

第三个重大更新,防止非内置ObjectFactory的过滤器。

于JDK20引入

jdk.jndi.rmi.object.factoriesFilter=com.sun.jndi.rmi.**;!*jdk.jndi.ldap.object.factoriesFilter=com.sun.jndi.ldap.**;!*

就是默认只允许使用jdk自带的ObjectFactory,别再想着第三方ObjectFactory bypass了。

至此,所有的JNDI利用都被堵了个遍,唯一的漏网之鱼是rmi协议中的StreamRemoteCall.executeCall(),详情还是翻前面的文章。

三,jdk8也受影响

这个时候小伙伴们就会抛出那句名言了,你修任你修,我用jdk8。然而遗憾的是,最近我在做安全研究的时候无意中发现,这股妖风也吹到jdk8了。。。

第二个重大更新,防止ldap协议反序列化的开关。

https://bugs.openjdk.org/browse/JDK-8290367

如下版本开始trustSerialData=false

openjdk 8u432/11.0.25/17.0.13

oraclejdk 8u461/11.0.28/17.0.16

第三个重大更新,防止非内置ObjectFactory的过滤器。

https://bugs.openjdk.org/browse/JDK-8290368

如下版本开始增加factoriesFilter

openjdk  17.0.17(8和11暂时未修复)

oraclejdk 8u471/11.0.29/17.0.17

详情

https://www.oracle.com/java/technologies/javase/8u461-relnotes.html

https://www.oracle.com/java/technologies/javase/8u471-relnotes.html

https://docs.redhat.com/en/documentation/red_hat_build_of_openjdk/8/html/release_notes_for_red_hat_build_of_openjdk_8.0.432/openjdk-80432-release-notes_openjdk

https://github.com/openjdk/jdk11u/blob/be7966c633830516c703f14610e4fef1bbe7f57d/src/java.naming/share/classes/com/sun/naming/internal/ObjectFactoriesFilter.java

https://github.com/openjdk/jdk8u/blob/976d0a196ce036c40147535209b80143e021c2fe/jdk/src/share/classes/com/sun/naming/internal/ObjectFactoriesFilter.java


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:珂技知识分享 珂字辈《jdk8或许也要告别JNDI利用了》

评论:0   参与:  0