Log4j 2 JNDI注入安全漏洞处理(CVE-2021-44228)
漏洞
- 漏洞编号:CVE-2021-44228
- 漏洞等级:高危,该漏洞影响范围极广,危害极大。
- 漏洞描述:Apache log4j2的版本在
2.0 ~ 2.14.1
之间时,存在JNDI注入漏洞,攻击者可以控制日志消息或日志消息参数,在启用消息查找替换时执行从LDAP服务器加载的任意代码。
影响范围
Apache log4j的2.0 - 2.15.0-rc1版本均存在该漏洞。
漏洞日志/流量排查
- 排查日志或者解码后完整的请求数据包中是否存在
${
关键字。 - 排查日志是否存在相关堆栈报错,堆栈里是否有
JndiLookup
、ldapURLContext
、getObjectFactoryFromReference
等与 jndi 调用相关的堆栈信息。
通用解决方案(推荐)
Apache Log4j团队已经提交了修复此漏洞的版本,2.15.0版本默认禁止jndi的调用,从2.16.0开始,移除了jndi的功能。
所以最好的方法是升级Log4j 2版本到2.16.0,涉及到的依赖Maven配置如下
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.16.0</version>
</dependency>
临时解决方案
如果升级log4j 2版本存在兼容问题,可以使用临时方案,设置log4j2.formatMsgNoLookups=true。
1、java启动命令中添加JVM参数设置
-Dlog4j2.formatMsgNoLookups=true
2、在配置文件配置log4j2.component.properties
在工程resource目录下添加配置文件:log4j2.component.properties
,并配置如下:
log4j2.formatMsgNoLookups=true
参考:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228