log4j2漏洞解决(2021.12.15)
1. 简单复现
maven依赖
<!-- lombok支持 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- 复现方式1:springboot引入log4j2依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- 复现方式2:普通引入log4j2依赖 -->
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-api</artifactId>-->
<!-- <version>2.12.1</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-core</artifactId>-->
<!-- <version>2.12.1</version>-->
<!-- </dependency>-->
测试
//@Slf4j 复现方式1
public class Test {
//复现方式2
//static Logger log = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
public static void main(String... args) {
log.error("${java:os}");
//日志打印出: Windows 10 10.0, architecture: amd64-64
}
}
2. 简单自查
2.1.查看maven仓库(IntelliJ IDEA -> setting -> maven)
我的仓库在:D:/apache-maven-3.6.3
2.2. 查找log4j2依赖版本
打开对应文件夹:D:\apache-maven-3.6.3\repository\org\apache\logging\log4j\log4j-api
2.3. 注意事项
引入了spring-boot-starter或者spring-boot-starter-web,默认的日志是logback。即使没有修改默认框架为log4j2, 仍需提高log4j2的版本(也要注意其他jar包依赖)。
3. 如何解决
用最简单的方法指定log4j2版本(高于2.16.0版本是安全的版本),清空D:\apache-maven-3.6.3\repository\org\apache\logging文件夹,
重新下载依赖,发现log4j2版本已变成2.16.0,至此问题已解决。或者使用IntelliJ IDEA查看依赖信息
<!-- 提高依赖版本 解决:普通引入log4j2依赖不指定版本,在版本锁定里面指定 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<!--<version>2.12.1</version>-->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<!--<version>2.12.1</version>-->
</dependency>
<!-- 锁定版本 解决:springboot引入log4j2依赖问题 -->
<dependencyManagement>
<dependencies>
<!-- 指定log4j2相关依赖 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</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-core</artifactId>
<version>2.16.0</version>
</dependency>
</dependencies>
</dependencyManagement>