Gradle/Java:如何安全升级log4j?

问题描述 投票:0回答:2

考虑到最近的 Log4J 漏洞 在 gradle 项目中升级传递依赖项的最安全方法是什么?我的项目没有明确使用 log4j(它使用 logback),但它有许多依赖项,带来了易受攻击的版本(< 2.15.0). First, is it necessary to upgrade anything if my SLF4J uses logback? And if I were to upgrade, how do I force 2.15 to be present in classpath instead of the older version?

java security gradle logging
2个回答
12
投票

将以下内容添加到您的

gradle.build
文件中:

configurations.all {
  resolutionStrategy.eachDependency { details ->
    if (details.requested.group == 'org.apache.logging.log4j') {
      details.useVersion '2.21.1'
      details.because 'zero-day exploits suck'
    }
  }
}

dependencies {
…
}

请注意,正如文档指出的那样:

以下机制允许您直接编写规则 注入解析引擎。正因为如此,他们才能被看到 作为暴力解决方案,这可能会隐藏未来的问题(例如,如果新的 添加依赖项)。因此,一般建议是仅使用 如果其他手段还不够的话,可以使用以下机制。

我意识到OP要求“最安全”的方式来升级依赖项——我选择将其解释为最有可能消除零日漏洞。尽管如此,我确实认识到这种强力方法并不能保证库之间的兼容性,但这应该确保 log4j 的易受攻击版本不会出现在您的依赖树/构建中。

您当然应该在进行更改后运行

gradle dependencies
,以确保更改已生效并且没有任何存在问题的挥之不去的版本。

更新:删除了版本比较,按照建议这里

更新:增加版本至2.21.1


0
投票

您可以将依赖管理插件添加到您的 gradle.build 中:

plugins {
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

dependencyManagement {
    imports {
        mavenBom 'org.apache.logging.log4j:log4j-bom:2.17.0'
    }
}

要确认更改,请运行

./gradlew dependencies
你应该看到类似的东西

 +--- org.apache.logging.log4j:log4j-to-slf4j:2.14.1 -> 2.17.0
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.32
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.0
© www.soinside.com 2019 - 2024. All rights reserved.