记录一下 log4j的漏洞

背景

log4j这次的bug,我相信大家都已经知道了,仅以这篇文章来记录下从这个bug中学习到的东西。

bug的产生

log4j2 RCE 漏洞总体来说是通过 JNDI 注入来完成的,具体的有 RMI 协议的方式和 LDAP 协议等不同方式,其实简单的来说,就是你输入和输出的数据会被记录到java的日志当中,并且会打印出来,而log4j会去根据某个符合来进行解析,而不是只是把日志答应出来,当你输入的数据符合条件的时候,就会去请求远程服务器,拿到那个服务器的命令,然后回本服务器上进行命令操作,这很危险的,可能会直接导致数据丢失、泄露,服务挂掉等一系列的问题。

bug复现

参考这篇文章 (环境搭建+复现)CVE-2021-44228 Apache Log4j 远程代码执行漏洞 本来以为都可以复现出来了,结果是我的jdk版本是8u241的,直接就报异常了,然后我大概搜了一下,没有找到低版本的jdk,就算了吧。

JNDI

JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),应用程序编程接口和服务供应商接口。应用程序编程接口提供了Java应用程序访问各种命名和目录服务的功能,服务供应商接口提供了任意一种服务的供应商使用的功能。

最好理解的就是java中对于数据库的连接方式,其实就是JAVA定义了JDBC的接口,各个厂家来去做对应实现,比如druid、Hikaricp等,springboot2 默认数据库连接池HikariCP

那当初为什么要设计一个JNDI的这个东西出来那? 其实主要是为了spring的一个扩展性,因为你作为框架,你的功能可以不那么全面,但是你的扩展性一定要好,给其他的开发者更多可以自定义的空间。但是那,现在爆出了这个log4j的bug导致出现了程序安全性的问题,所以这其实是在为了保证程序扩展性的同时,没有将对应的安全性做好而出现的问题。

参考

猜你喜欢

转载自juejin.im/post/7041461113703104548