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:

Log4J 2.17.1 包含对 CVE-2021-44832 的修复

2021/12/22:

Spring Boot 2.5.82.6.2 已经发布,并为 logback 1.2.9 和 Log4J 2.17.0 提供依赖管理。

2.17.0 修复 CVE-2021-45105 2.12.2发布(2021/12/14) 2.16.0 还修复了 CVE-2021-45046

操作:

spring-boot“默认”不受 CVE-2021-44228(log4shell) 的影响。

虽然版本[2 - 2.6.1](任何-starter)依赖于log4j-apislf4j-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】:

现在推荐使用 &lt;log4j2.version&gt;2.16.0&lt;/log4j2.version&gt;

【讨论】:

【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

pom.xml中properties标签中的maven编译器和plugin标签中的maven编译器之间的区别[重复]

maven项目 pom.xml文件解析

Maven - pom.xml 文件

Maven---pom.xml详解

maven pom.xml解释 (转)

Maven中将所有依赖的jar包全部导出到文件夹