Maven pom.xml 中将 log4j2 的所有用法升级到 2.15.0 的最简单方法是什么,包括使用 log4j2 的依赖项?请参阅 CVE-2021-44228

发现 log4j2 <= 2.14.1 存在严重的安全漏洞(参见 https://nvd.nist.gov/vuln/detail/CVE-2021-44228 )。如何更新 Spring Boot 应用程序的 pom.xml 以确保 log4j2 的所有(递归)用法都使用版本 2.15.0?

stack overflow 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-44228
原文答案

答案:

作者头像

### 更新:

操作:

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 加入

我们是 definitely affected (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 中。

...构建、测试、发布、部署。


链接:

作者头像

这也会规定 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>
作者头像

现在推荐使用 <log4j2.version>2.16.0</log4j2.version>

作者头像

一般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 without tag 以便他们都将从这个集中的更改中受益。

作者头像

根据 apache site ,Log4J的最低可接受级别现在 2.17.1 - 缓解措施是升级到log4j 2.3.2(对于Java 6),2.12.4(对于Java 7),(对于Java 7),,或2.17.1(对于Java 8及以后)。