Maven pom.xml 中将 log4j2 的所有用法升级到 2.15.0 的最简单方法是啥,包括使用 log4j2 的依赖项?请参阅 CVE-2021-44228
Posted
技术标签:
【中文标题】Maven pom.xml 中将 log4j2 的所有用法升级到 2.15.0 的最简单方法是啥,包括使用 log4j2 的依赖项?请参阅 CVE-2021-44228【英文标题】:What is the easiest way in Maven pom.xml to upgrade all usages of log4j2 to 2.15.0, including dependencies using log4j2? See CVE-2021-44228Maven pom.xml 中将 log4j2 的所有用法升级到 2.15.0 的最简单方法是什么,包括使用 log4j2 的依赖项?请参阅 CVE-2021-44228 【发布时间】:2021-12-13 08:12:18 【问题描述】:发现 log4j2 https://nvd.nist.gov/vuln/detail/CVE-2021-44228)。如何更新 Spring Boot 应用程序的 pom.xml 以确保 log4j2 的所有(递归)用法都使用 2.15.0 版本?
【问题讨论】:
请检查此设置方式。 ***.com/a/70329703/7235707 【参考方案1】:更新:
2022/01/04:2021/12/22:Log4J 2.17.1 包含对 CVE-2021-44832 的修复
2.17.0 修复 CVE-2021-45105 2.12.2发布(2021/12/14) 2.16.0 还修复了 CVE-2021-45046Spring Boot 2.5.8 和 2.6.2 已经发布,并为 logback 1.2.9 和 Log4J 2.17.0 提供依赖管理。
操作:
spring-boot“默认”不受 CVE-2021-44228(log4shell) 的影响。
虽然版本[2 - 2.6.1]
(任何-starter
)依赖于log4j-api
和slf4j-to-log4j
,
Slf4j says:
如果您将 log4j-over-slf4j.jar 与 SLF4J API 结合使用,除非底层实现是 log4j 2.x,否则您是安全的。
可以肯定的是,
在maven 检查输出:
mvn dependency:tree -Dincludes='*log4j*'
在gradle:
gradle -q dependencyInsight --dependency log4j
有spring-boot-starter-log4j2
在船上
我们肯定受到影响(spring-boot > 1)!
要(修复)更新,最简单的可能是:
行家:
<properties>
...
<log4j2.version>2.17.1</log4j2.version><!-- as of 2021/12/28 -->
</properties>
..在 pom 中。
分级:
ext['log4j2.version'] = '2.17.1'
.. 在 build.gradle 中,或者:
log4j2.version=2.17.1
.. 在 gradle.properties 中。
...构建、测试、发布、部署。
链接:
log4j2-vulnerability-and-spring-boot slf4j-log4shell CVE-2021-44228 CVE-2021-45046 CVE-2021-45105【讨论】:
macos 使用命令:mvn dependency:tree -Dincludes='*log4j*'
【参考方案2】:
现在推荐使用
<log4j2.version>2.16.0</log4j2.version>
【讨论】:
【参考方案3】:这也会规定spring-boot-starter-log4j2的log4j2组件版本。
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j</artifactId>
<version>2.17.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
遵循@Piotr P. Karwasz 的建议,这是一个更好的设置选择。 更新:
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.17.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
顺便说一下,如果项目的log4j依赖只来自spring-boot-starter-log4j2,有确定的设置方式,参考spring blog
<properties>
<log4j2.version>2.17.0</log4j2.version>
</properties>
【讨论】:
log4j
工件设置了与 Log4j 相关但不属于 Log4j 项目的许多其他工件的版本。为了仅管理 Log4j 工件的版本,应使用 log4j-bom
。
log4j 是否完全/二进制向后兼容?换句话说,它可以在不改变任何一行代码的情况下被替换吗? ***.com/q/70440185/2365724【参考方案4】:
一般maven项目,可以用deps mgmt强制log4j-core版本。
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
...
</dependencies>
</dependencyManagement>
在此之后,确保这个 pom.xml 和所有继承 pom.xml 确实定义了 log4j deps 不带标签,这样他们都将受益于这个集中的变化。
【讨论】:
【参考方案5】:根据apache site,log4j 的最低可接受级别现在是 2.17.1 - 缓解措施是升级到 Log4j 2.3.2(适用于 Java 6)、2.12.4(适用于 Java 7)或 2.17.1(适用于 Java 8 及更高版本)。
【讨论】:
以上是关于Maven pom.xml 中将 log4j2 的所有用法升级到 2.15.0 的最简单方法是啥,包括使用 log4j2 的依赖项?请参阅 CVE-2021-44228的主要内容,如果未能解决你的问题,请参考以下文章