一、漏洞描述
Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。Apache Log4j2是 Log4j的升级版本,据分析,该漏洞产生的原因在于Log4j在记录日志的过程中会对日志内容进行判断,如果内容中包含了${,则Log4j会认为此字符属于可替换的变量,并且Log4j支持JNDI远程加载的方式替换变量值。此漏洞的危害等级很大,只要是调用了Log4j的日志记录功能,并且有用户可控的输入,就可能导致JNDI注入。
二、漏洞等级
高危
三、影响范围
Apache Log4j 2.x <= 2.15.0-rc1 版本均受影响。
Apache Struts2、Apache Solr、Apache Druid、Apache Flink 等均受影响。
四、修复建议
a) 升级到最新版本:
1、升级Apache Log4j2所有相关应用到最新的log4j-2.15.0-rc2版本,地址为:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
2、升级已知受影响的应用及组件,如spring-boot-start-log4j2/Apache Solr/Apache Flink/Apache Druid
b) 缓解措施:
1、添加 jvm 启动参数 -Dlog4j2.formatMsgNoLookups=true
2、在应用程序的 classpath 下添加 log4j2.component.properties 配置文件 文件,文件内容:log4j2.formatMsgNoLookups=True
3、设置系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
4、建议 JDK 使用 11.0.1、8u191、7u201、6u211 及以上的高版本
5、限制受影响应用对外访问互联
参考链接
https://github.com/apache/logging-log4j2
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2