关于java:引爆全球的-Log4j2-核弹级漏洞JNDI-到底是个什么鬼

34次阅读

共计 2143 个字符,预计需要花费 6 分钟才能阅读完成。

背景

前段时间,Log4j2, Logback 日志框架频频爆雷:

炸了!Log4j2 再爆破绽,v2.17.1 横空出世。。。

Logback 也爆雷了,惊爆了。。。

究其原因,很大一部分就是因为 JNDI 这个玩意。。。

JNDI

JNDI:Java Naming and Directory Interface,即:Java 命名和目录接口 ,它专为 Java 应用程序提供命名和目录性能。

JNDI 架构图:

如图,JNDI 蕴含以下两局部:

1)JNDI API:

Java 应用程序即是通过 JNDI API 来拜访各种命名和目录服务的。

2)JNDI SPI(服务提供接口)

Java 应用程序通过 JNDI SPI 插入各种命名和目录服务的,而后通过 JNDI API 进行拜访。

比方,没用 JNDI 之前,你可能要在 Java 代码中写死一些 JDBC 的数据库配置,有了 JNDI,就能够把数据源定义一种资源,而后通过名称进行查找,示例代码如下:

Connection conn = null; 
try {Context ctx = new InitialContext();
    DataSource ds = (Datasource) ctx.lookup("java:MysqlDataSource");
    conn = ds.getConnection();
    ...
} catch(Exception e) {...} finally {...}

当然,数据源及配置当初都是 Spring 进行治理了,这里只是介绍 JNDI 的一种用法。

说白了,JNDI 就是 Java 的一套标准,相当于把某个资源进行注册,再依据资源名称来查找定位资源。


要应用 JNDI,必须要有一个 JDNI 类,以及 1 个或者多个服务提供者(SPI),比方,在 JDK 中就蕴含以下几个服务提供者:

  • 轻量级目录拜访协定 (LDAP)
  • 通用对象申请代理体系结构 (CORBA)
  • 通用对象服务命名服务 (COS)
  • Java 近程办法调用 (RMI)
  • 域名服务 (DNS)

这里的 LDAP 协定正是频频爆破绽的本源,攻击者屡试不爽。

Log4j2 破绽回顾

网上很多复现的示例,为了不造成更大影响,这里就不实战演示了,示例代码如下:

/**
 * 作者:栈长
 * 起源公众号:Java 技术栈
 */
public class Test {public static final Logger logger = LogManager.getLogger();
    
    public static void main(String[] args) {logger.info("${jndi:ldap://localhost:8080/dangerious}");
    }
    
}

这就是 Log4j2 核弹级破绽的主因!

LDAP 协定在下面有提到,它是一个凋谢的利用协定,也是 JDK JNDI 上面的一个服务提供者,用于提供目录信息访问控制。

破绽正是利用了 JDNI 中的 ldap 协定,以上代码中的 localhost 如果是攻击者的地址,就会造成近程代码执行破绽,结果就不堪设想。。

这是因为 Log4j2 有一个 Lookups 性能,它提供了一种向 Log4j 配置中增加值的办法,也就是通过一些办法、协定去读取特定环境中的信息,Jndi Lookup 就是其中一种:

通过一系列的版本修复再调整,从 Log4j v2.17.0 开始,JNDI 操作须要通过以下参数被动开启:

log4j2.enableJndiLookup=true

当初这种 jndi:ldap 协定查找形式也被 Log4j2 Lookups 干掉了,仅反对 java 协定或者没有协定这种查找形式了。

Log4j2 破绽的后续停顿,栈长也会继续跟进,关注公众号 Java 技术栈,公众号第一工夫推送。

结语

Log4j2 Lookups 引发的破绽真不少,这阵子始终在爆雷,这还真是个鸡肋性能,有几个人用到了?

当然,这阵子的破绽不全是因为 JNDI 造成的,JNDI 它只是提供了一套标准,用得不好总不能怪它吧?所以,咱们也不能把责任全推到 JNDI 身上,Log4j2 Lookups 性能脱不了干系,既然提供了 Jndi Lookup 性能,但对其影响面思考的太少了。。

一个日志框架,最次要的目标是记录日志,尽管提供了许多其余丰盛的性能,但如果没有思考到位,反而会引发严重后果,毕竟平安第一,但也没方法,用开源就得承受开源的利弊。

还有人说,本人开发,这可能是气话了。支流开源的有很多公司在用,爆破绽还有大厂反馈,能第一工夫感知,本人开发的,啥时候爆雷了,爆在哪了,怎么死的都不晓得,能不能做好一款产品和继续保护还是另外一回事。

参考文档:

  • https://docs.oracle.com/javas…
  • https://logging.apache.org/lo…

Log4j2 破绽的后续停顿,栈长也会继续跟进,关注公众号 Java 技术栈,公众号第一工夫推送。

版权申明!!!

本文系公众号 “Java 技术栈 ” 原创,转载、援用本文内容请注明出处, 剽窃、洗稿一律投诉侵权,后果自负 ,并保留追究其法律责任的权力。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)

2. 劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.Spring Boot 2.6 正式公布,一大波新个性。。

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0