原始脚本和仓库:https://github.com/CERTCC/CVE-2021-44228_scanner
修改者:Alex Pena
容易受到 log4j CVE-2021-44228 问题影响的应用程序,可以通过扫描 jar、war 和 ear 文件,搜索是否存在 JndiLookup.class 来检测。
发现的任何文件都值得进一步调查,以确定使用它的应用程序是否易受攻击。对于任何存在的 JndiLookup.class,log4j 通常会在 jar 文件名中包含版本号。例如,命中 log4j-core-2.14.1.jar 表明应用程序易受攻击。另外,log4j-core-2.16.jar 也可能产生命中,因为 JndiLookup 代码在 log4j 2.16 版本中仍然存在,但默认情况下是禁用的。详情请参见 VU#930724。
参数
-Force 允许扫描系统和隐藏文件(Force 参数不会覆盖安全限制)
-Verbose 额外的扫描输出和消息
扫描当前目录
.\checkjndi.ps1
扫描 test_folder 目录,并输出额外信息及扫描系统/隐藏文件
.\checkjndi.ps1 -Force -Verbose c:\Users\alex\Desktop\test_folder
例如,以下是调用 PowerShell 版本扫描器的示例:

可以将要扫描的位置通过管道传递给脚本,以控制检查的内容。例如,要扫描包含在 paths.txt 文件中的路径列表:
get-content .\paths.txt | .\checkjndi.ps1
让我们看一下 Windows 扫描执行中的第一个命中结果:
C:\Users\unst0\Desktop\test_folder\apache-log4j-2.17.1-bin.zip contains apache-log4j-2.17.1-bin/log4j-core-2.17.1.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class ** BUT APPEARS TO BE PATCHED **
这个 jar 文件包含 2.17 版本的 log4j,该版本不易受 CVE-2021-44228 影响。报告此结果仅为提供信息,表明供应商已修补其产品。
让我们看一下第二个命中结果:
WARNING: C:\Users\unst0\Desktop\test_folder\ghidra_10.0.4_PUBLIC_20210928.zip contains ghidra_10.0.4_PUBLIC/Ghidra/Framework/Generic/lib/log4j-core-2.12.1.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class
这里我们可以看到 Ghidra 使用了 log4j 2.12.1 版本,因此我们应假设它易受攻击。事实上,Ghidra 10.1 之前的版本 易受 CVE-2021-44228 影响。
让我们看一下第三个命中结果:
WARNING: C:\Users\unst0\Desktop\test_folder\server.jar contains META-INF/libraries/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar contains org/apache/logging/log4j/core/lookup/JndiLookup.class
这里我们可以看到 minecraft server.jar 文件使用了 log4j 2.14.1 版本,因此我们应假设它易受攻击。事实上,Minecraft: Java Edition 1.18.1 之前的服务器版本 易受 CVE-2021-44228 影响。
您应该调查这两个脚本报告的任何命中结果,并确认 log4j 版本确实是已修复的 2.16 版本,或者联系您的软件供应商获取修复后的软件版本。另外,VU#930724 提供了关于如何从易受攻击的 jar 文件中移除 JndiLookup.class 的信息。
PowerShell 版本的扫描器会在无法检查文件或目录时提供额外的错误报告。特别是,任何报告 UnauthorizedAccessException 的 Unable to scan 错误都表明访问目录和/或文件时存在权限问题。任何报告 InvalidDataException 的 Unable to scan 错误通常是由于存档文件损坏所致。