在 gradle 传递依赖项中检测 Apache Log4j 漏洞的存在

Posted

技术标签:

【中文标题】在 gradle 传递依赖项中检测 Apache Log4j 漏洞的存在【英文标题】:Detecting Apache Log4j vulnerability presence in gradle transitive dependencies 【发布时间】:2022-01-23 21:40:55 【问题描述】:

最近在 log4j https://nvd.nist.gov/vuln/detail/CVE-2021-44228 中存在一个漏洞,其重要性得分为 10

如何检查 gradle 中是否存在易受攻击的 Log4j 版本,以便列出所有依赖项,包括传递依赖项?

【问题讨论】:

./gradlew -q dependencies|grep -i log4j - 这应该为您提供所使用的 log4j 依赖项(如果有)的版本。 @Turing85,这不应该是一个答案,而不是一个评论吗? 【参考方案1】:

我们可以使用

./gradlew -q dependencies

列出依赖树。它将列出所有依赖项及其各自的版本。由于此输出可能很长,我们可以使用grep 对其进行过滤:

./gradelw -q dependencies | grep -i log4j

这将列出所有 log4j-dependencies 及其各自的版本。

【讨论】:

gradle中也有dependencyInsight?知道这有什么不同,应该使用/不使用吗? gradle -q dependencyInsight 我推荐阅读documentation on dependencyInsight。它指出:“...每个 Gradle 项目都提供任务 dependencyInsight 从命令行渲染所谓的依赖关系洞察报告。给定依赖关系图中的依赖关系,您可以识别选择原因并追踪依赖选择的起源。 ..."【参考方案2】:
gradle -q dependencyInsight --dependency org.apache.logging.log4j 
 --configuration scm

根据文章,还有另一种使用dependencyInsight检查此列表的方法:- https://venturebeat.com/2021/12/17/how-to-detect-whether-you-have-the-log4j2-vulnerability/

【讨论】:

以上是关于在 gradle 传递依赖项中检测 Apache Log4j 漏洞的存在的主要内容,如果未能解决你的问题,请参考以下文章

从 Gradle 依赖项中排除 .class 文件

Gradle - 排除嵌套的传递依赖

Gradle,如何禁用所有传递依赖

使用 Gradle 时如何排除传递依赖项的所有实例?

我啥时候需要在 Gradle 依赖项中使用 Kapt?

gradle - 依赖项中的库重复