1 项目检查
2.1 查询使用该包的项目
由于受影响的包主要是 log4j-core,因此首先需要检查项目中是否引用了该包:
find /path/to/your/project -name log4j-core*
如果检查到例如下方的结果:(2<版本号<2.14.1)
/path/to/your/project/WEB-INF/lib/log4j-core-2.7.jar
则表示该项目引用了受影响的版本的 Log4j2,需要尽快查看项目代码,结合实际情况进行处理。
- 如果该项目无需使用 Log4j2,则将其移除。
- 如果该项目需要使用 Log4j2,则需要尽快升级版本。
2 缓解措施
目前缓解措施有如下:
(1)修改 jvm 参数:-Dlog4j2.formatMsgNoLookups=true
(2)修改配置:log4j2.formatMsgNoLookups=True
(3)将系统环境变量:LOG4J_FORMAT_MSG_NO_LOOKUPS 设置为 true
**注意:**以上缓解措施中,2.10以前版本修改jvm参数无效,2.10及以后版本修改系统环境变量无效。
目前,第(3)项措施最快捷。
在项目所在机器配置系统环境变量操作如下:
vi ~/.bash_profile
# --------------- 添加以下内容 ---------------
# Apache Log4j2 Bug fix
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
# --------------- 添加以上内容 ---------------
# 保存退出
修改完环境变量后,还需要重启项目。
3 修复措施
对所有使用到 Log4j 组件的项目进行升级,使用最新版本 2.15.0:
- log4j-slf4j-impl:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl/2.15.0
- log4j-api:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.15.0
- log4j-core:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.15.0
- log4j-jul:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jul/2.15.0
3.1 Spring Boot 修复措施
如果是 maven 管理的项目,通过升级 log4j 的版本解决漏洞。
1、使用 Log4j2 的 pom.xml 的修改样例如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<!-- 排除旧版本的 Apache Log4j2 组件 -->
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
</exclusion>
</exclusions>
<!-- 排除旧版本的 Apache Log4j2 组件 -->
</dependency>
<!-- 引入新版本的 Apache Log4j2 组件 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.15.0</version>
</dependency>
<!-- 引入新版本的 Apache Log4j2 -->
2、使用 Logback 的 pom.xml 的修改样例如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<!-- 排除旧版本的 Apache Log4j 组件 -->
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
<!-- 排除旧版本的 Apache Log4j 组件 -->
</exclusions>
</dependency>
<!-- 引入新版本的 Apache Log4j2 组件 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.15.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.15.0</version>
</dependency>
<!-- 引入新版本的 Apache Log4j2 组件 -->
