0 漏洞相关信息
https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues
https://mp.weixin.qq.com/s/Yq9k1eBquz3mM1sCinneiA
https://www.zhihu.com/question/505025655/answer/2267000256
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<=version<2.15
目前,第(3)项措施最快捷。
在项目所在机器配置系统环境变量操作如下:
vi ~/.bash_profile
# --------------- 添加以下内容 ---------------
# Apache Log4j2 Bug fix
export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
# --------------- 添加以上内容 ---------------
# 保存退出
修改完环境变量后,还需要重启项目。
3 修复措施
对所有使用到 Log4j 组件的项目进行升级,使用最新版本 2.16.0
:(以下两个必须同步升级到2.16.0,否则运行会报错)
- log4j-core:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.16.0
- log4j-api:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.16.0
其它相关组件,建议也升级:
- log4j-slf4j-impl:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl/2.16.0
- log4j-jul:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jul/2.16.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.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>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.16.0</version>
</dependency>
<!-- 引入新版本的 Apache Log4j2 -->
2、使用 Logback 的项目,为了保险起见,心有余力还是升级以下,以防万一。
pom.xml 的修改样例如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除旧版本的 Apache Log4j2 组件 -->
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
<!-- 排除旧版本的 Apache Log4j2 组件 -->
</exclusions>
</dependency>
<!-- 引入新版本的 Apache Log4j2 组件 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.16.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.16.0</version>
</dependency>
<!-- 引入新版本的 Apache Log4j2 组件 -->