你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Apache Log4j2 高危漏洞缓解和修复措施

2021/12/13 22:36:16

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 组件 -->