Log4j 2 JNDI注入安全漏洞处理(CVE-2021-44228)

时间:2022-06-01 21:42:27

漏洞

  • 漏洞编号:CVE-2021-44228
  • 漏洞等级:高危,该漏洞影响范围极广,危害极大。
  • 漏洞描述:Apache log4j2的版本在 2.0 ~ 2.14.1之间时,存在JNDI注入漏洞,攻击者可以控制日志消息或日志消息参数,在启用消息查找替换时执行从LDAP服务器加载的任意代码。

影响范围

Apache log4j的2.0 - 2.15.0-rc1版本均存在该漏洞。

漏洞日志/流量排查

  • 排查日志或者解码后完整的请求数据包中是否存在${关键字。
  • 排查日志是否存在相关堆栈报错,堆栈里是否有JndiLookupldapURLContextgetObjectFactoryFromReference等与 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