
扫描器,用于检测易受攻击的 Log4J 版本,帮助团队评估其对 CVE-2021-44228(严重)、CVE-2021-45046、CVE-2021-45105 和 CVE-2021-44832 的暴露程度。可通过仔细检查整个文件系统(包括所有已安装的应用程序)来搜索 Log4J 实例。它能够找到隐藏多层深处的 Log4J 实例。适用于 Linux、Windows 和 Mac,以及 Java 能运行的任何地方!
当前将 log4j-core 版本 2.3.2、2.12.4 和 2.17.1 报告为 _SAFE_,版本 2.3.1、2.12.2、2.12.3、2.15.0、2.16.0 和 2.17.0 报告为 _OKAY_,所有其他版本报告为 _VULNERABLE_(不过它确实将 2.0-beta9 之前的版本报告为 _POTENTIALLY_SAFE_)。它将较旧的 log4j-1.x 版本报告为 _OLD_。
可以正确检测可执行的 spring-boot jar/war 内的 log4j、混合到 uber jar 中的依赖项、shaded jar,甚至只是未压缩地放在文件系统上的 exploded jar 文件(即 *.class)。
我们目前维护着一个用于测试的 log4j-samples 集合。
java -jar log4j-detector-2021.12.29.jar ./samples
-- github.com/mergebase/log4j-detector v2021.12.29 (by mergebase.com) analyzing paths (could take a while).
-- Note: specify the '--verbose' flag to have every file examined printed to STDERR.
false-hits/log4j-core-2.12.2.jar contains Log4J-2.x == 2.12.2 _OKAY_
false-hits/log4j-core-2.12.3.jar contains Log4J-2.x == 2.12.3 _OKAY_
false-hits/log4j-core-2.12.4.jar contains Log4J-2.x == 2.12.4 _SAFE_
false-hits/log4j-core-2.15.0.jar contains Log4J-2.x == 2.15.0 _OKAY_
false-hits/log4j-core-2.16.0.jar contains Log4J-2.x == 2.16.0 _OKAY_
false-hits/log4j-core-2.17.0.jar contains Log4J-2.x == 2.17.0 _OKAY_
false-hits/log4j-core-2.17.1.jar contains Log4J-2.x >= 2.17.1 _SAFE_
false-hits/log4j-core-2.3.1.jar contains Log4J-2.x == 2.3.1 _OKAY_
false-hits/log4j-core-2.3.2.jar contains Log4J-2.x == 2.3.2 _SAFE_
true-hits/log4j-core-2.0-beta9.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.10.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.10.0.zip contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.2.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.2.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.3.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.9.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
old-hits/log4j-1.1.3.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-1.2.17.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-core-2.0-beta2.jar contains Log4J-2.x <= 2.0-beta8 _POTENTIALLY_SAFE_ (Did you remove JndiLookup.class?)
_VULNERABLE_ -> 您需要升级或删除此文件。
_OKAY_ -> 我们针对 Log4J 版本 2.3.1、2.12.2、2.12.3、2.15.0、2.16.0 和 2.17.0 报告此状态。我们建议升级到 2.17.1。
_SAFE_ -> 我们目前仅针对 Log4J 版本 2.3.2、2.12.4 和 2.17.1(及更高版本)报告此状态。
_OLD_ -> 您不受 CVE-2021-44228 的影响,但应计划升级,因为 Log4J 1.2.x 已停止维护 7 年,并且存在多个已知漏洞。
_POTENTIALLY_SAFE_ -> 不存在 "JndiLookup.class" 文件,可能是因为您的 Log4J 版本非常旧(2.0-beta9 之前),或者是因为有人已删除了此文件。如果是这种情况,请确保删除 "JndiLookup.class" 的是您团队或公司的成员,因为已知攻击者会自行删除此文件,以防止其他竞争攻击者访问已受感染的系统。
java -jar log4j-detector-2021.12.29.jar
Usage: java -jar log4j-detector-2021.12.29.jar [--verbose] [--json] [--stdin] [--exclude=X] [paths to scan...]
--json - Output STDOUT results in JSON. (Errors/warning still emitted to STDERR)
--stdin - Read STDIN for paths to explore (one path per line)
--exclude=X - Where X is a JSON list containing full paths to exclude. Must be valid JSON.
Example: --exclude='["/dev", "/media", "Z:\TEMP"]'
Exit codes: 0 = No vulnerable Log4J versions found.
1 = At least one legacy Log4J 1.x version found.
2 = At least one vulnerable Log4J version found.
About - MergeBase log4j detector (version 2021.12.29)
Docs - https://github.com/mergebase/log4j-detector
(C) Copyright 2021 Mergebase Software Inc. Licensed to you via GPLv3.
git clone https://github.com/mergebase/log4j-detector.git
cd log4j-detector/
mvn install
java -jar target/log4j-detector-latest.jar
我们在以下位置维护 log4j 样本集合:https://github.com/mergebase/log4j-samples
GPL 3.0 版本
Java 编译器将字符串字面量直接存储到已编译的 *.class 文件中。如果 log4j-detector 在您的文件系统上检测到名为 "JndiManager.class" 的文件,它会检查该文件是否包含字符串:"Invalid JNDI URI - {}"。事实证明,该特定字符串字面量仅存在于打了补丁的 Log4J 版本(2.15.0)中。任何不包含该字符串的 Log4J 版本都存在漏洞。
这种通过检查 *.class 文件中字符串字面量的技术进一步扩展到准确检测安全版本 2.3.2、2.12.4 和 2.17.1。
log4j-core 库的命中。那么 log4j-api 呢? 许多扫描仪(包括 GitHub 自己的 Dependabot)当前都将 "log4j-core" 和 "log4j-api" 库报告为易受攻击的。这些扫描仪是错误的。目前没有任何现有版本的 "log4j-api" 库可以被这些漏洞中的任何一个利用。
在 MergeBase,我们以扫描准确性为荣。您已经忙于修补和防御系统。我们不想让您将时间浪费在误报上。这就是我们不报告任何针对 log4j-api 命中的原因。
版本 2.10.0 很重要,因为这是第一个可以通过 Log4J 配置禁用 Log4J 易受攻击的“消息查找功能”的版本。
版本 2.12.2 很重要,因为它是应于 CVE-2021-44228 不易受攻击的 Java 7 兼容 Log4J 版本。
版本 2.15.0 和 2.16.0 很重要,因为这是 Log4J 默认开箱即用的配置不易受 CVE-2021-44228 攻击的第一个版本。
而版本 2.3.2、2.12.4 和 2.17.1 很重要,因为它们不易受近期发现的 CVE(例如 CVE-2021-45046 和 CVE-2021-45105)的攻击。尽管这些漏洞严重程度远不及前者,但我们预计每个人都会想要修补到 2.3.2、2.12.4 或 2.17.1 之一。
"!" 表示 log4j-detector 进入了 zip 归档文件(例如 .zip、.ear、.war、.aar、*.jar)。由于 zip 文件可以包含 zip 文件,单个结果中可能包含多个 "!" 指示符。
注意:log4j-detector 仅递归进入 zip 归档文件。它不会进入 tar、gz 或 bz2 等格式。主要原因是 Java 系统通常配置为执行 jar 内的 jar,但从未配置为执行其他文件格式(据我所知!)。因此,在 *.tar.gz 内部的 log4j 副本对于正在运行的 Java 系统来说可能无法访问,因此不值得报告为漏洞。
第二个注意:对于 zip 中的 zip,我们的扫描器会在尝试扫描之前将内部 zip 完全加载到内存中(使用 ByteArrayInputStream)。如果您的系统上有非常大的内部 zip 文件(例如 1 GB 或更大),您可能需要给 Java 提供额外的内存。
只有 Log4J 2.x 的版本(从 2.0-beta9 到 2.14.1)容易受到 CVE-2021-44228 的攻击。
好问题!因为我们在 Github 中包含了完整的源代码(所有 2500 行 Java 代码),以及构建步骤,而且此工具没有依赖项,所以您不需要太长时间就能仔细研究代码,直到满意为止。如果您不信任 Maven,可以直接进入 "src/main/java/com/mergebase/log4j" 目录并输入 "javac *.java"。这样也可以!
我们还使用 MergeBase 代码签名密钥对放在仓库根目录(./log4j-detector-2021.12.29.jar)中的预编译 jar 进行了签名。请运行 "jarsigner -verbose -verify log4j-detector-2021.12.29.jar" 以确认这一点。

MergeBase 是一家 SCA(软件组合分析)公司,总部位于加拿大温哥华。我们与 Snyk、Sonatype、Blackduck 等公司类似,帮助公司检测并管理其软件中易受攻击的开源库。欢迎了解我们!我们拥有出色的准确性、强大的语言支持,而且价格也不贵:mergebase.com/pricing。
如果您能试用我们 SCA 产品的 2 周免费试用版,我们将非常高兴!如果您给我们的 CEO([email protected])发送一封主题为 "log4j-detector" 的电子邮件,我们会将您的免费试用期延长至 4 周。