#漏洞简介
Apache Log4j2远程代码执行漏洞
当打印的日志含有${字符串时程序会使用lookup解析要打印的字符串,执行任意远程代码,框架没有做相应的过滤导致注入。官网已经在2.16.0(jdk8)和2.12.2(jdk7)修复该问题。
Log4j – Apache Log4j Security Vulnerabilities
2.15.0版本修复CVE-2021-44228漏洞之后,在2.16.0又修复了CVE -CVE-2021-45046.
#影响范围
Apache Log4j 2.x <=2.14.1 (官网2021/12/13最新下载的2.15.0中已经修复该问题)
#修复措施
一、jdk8+的升级到官网的log4j 2.16.0版本(Index of /dist/logging/log4j/2.16.0),log4j-core-2.16*.jar中的JndiManager.java中已经增加了校验;
jdk7的需要升级到log4j-2.12.2版本(https://archive.apache.org/dist/logging/log4j/2.12.2/)
可以看到2.12.2和2.16.0中消息lookups功能已经不支持了.
二、不能升级的可以通过以下措施来缓解该问题(本人观察都是关闭lookups功能的开关):
1.在log4j2.x >=2.10的版本
创建log4j2.component.properties文件,文件中增加配置 “log4j2.formatMsgNoLookups=true”
执行下面的命令,设置环境变量LOG4J_FORMAT_MSG_NO_LOOKUPS为true来关闭lookups功能。
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
echo "export LOG4J_FORMAT_MSG_NO_LOOKUPS=true" >> ~/.bash_profile
2.对于从log4j2.7到2.14的版本。
修改log4j2.xml中所有PatternLayout的pattern中的%m修改为%m{nolookups}
3.对于从2.0-beta9到2.7的版本,唯一的缓解措施是从 log4j-core-*.jar类路径中删除JndiLookup类:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
参考:
官网说明: Log4j – Apache Log4j Security Vulnerabilities
源码比对:
Index of /dist/logging/log4j/2.16.0