log4j漏洞修复

752 阅读1分钟

这两天跟所有小伙伴一样,从2021年12月10日开始爆出log4j漏洞后,就疯狂在修复系统漏洞。

临时修复方案是:应用启动参数加上:-Dlog4j2.formatMsgNoLookups=true

到了第二天,12月11日,官方给出了正式的修复版本:

github.com/apache/logg…

image.png

查找maven仓库,相应的包也更新了

mvnrepository.com/artifact/or…

image.png

mvnrepository.com/artifact/or…

image.png

但是,项目上使用的spring boot依赖,

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

查了下springboot log4j2的依赖包,还没更新修复!

mvnrepository.com/artifact/or…

image.png

在 issue 也看到留言了

github.com/spring-proj…

image.png

最后发现,下面有人解决了:

image.png

也就是,spring boot项目的解决方案,是在 pom.xml 里,声明

<properties>
	<log4j2.version>2.15.0</log4j2.version>
</properties>

会替换spring boot 对log4j组件的版本号。

因为文章里面也提到,

在文档 docs.spring.io/spring-boot… 中,有列举出所有组件的版本号变量名称。

我们在声明中替换的变量名,跟文档上的参数得对的上,才会更新。

image.png

能用此方案的前提是,项目的根pom.xml是依赖了如下类似内容:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.4.RELEASE</version>
	<relativePath/> 
</parent>

已经依赖了官方组件。

如果没有,则只能在根pom.xml,手动添加如下依赖,更新下版本:

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>${log4j2.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-jul</artifactId>
	<version>${log4j2.version}</version>
</dependency>

当然也要声明

<properties>
	<log4j2.version>2.15.0</log4j2.version>
</properties>

区别在于,上面的声明,是替换官方组件内置的参数;

下面的声明,只是自己本地的变量名称。