Log4JShell 字节码检测器是一款开源工具,可帮助识别 jar 文件是否受严重漏洞 CVE-2021-44228 影响。该工具扫描 jar 文件,并将其中的类与一组预先计算好的易受攻击类的哈希值进行比对。这些哈希值已针对 Maven Central 上的工件预先计算。
重要更新:我们扩展了 Maven Central 上 受影响工件列表。该列表包含 18,816 个工件。这些工件要么将 log4j-core 声明为依赖项,要么我们在其中识别出与受影响版本的 log4j-core 相匹配的 .class 文件。
java -cp <已下载JAR的路径> de.codeshield.log4jshell.Log4JDetector <待检查JAR的绝对路径>如果 jar 文件受影响,工具会在命令行输出信息:
CVE-2021-44228 found declared as dependency in META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml
CVE-2021-44228 found in class file org/apache/logging/log4j/core/net/JndiManager$1.class
java -cp <已下载JAR的路径> de.codeshield.log4jshell.Log4JProcessDetectorlog4j 中发现了一个严重的远程代码执行漏洞,版本 2.0-beta9 到 2.14 受影响。该漏洞被归类为严重级别,因为它影响了 log4j 这一 Java 中最常用的日志库之一。网上已有大量参考文献和文章。
Log4j 当前和过去一直被用于几乎所有的 Java 项目中进行日志记录。现在我们需要了解哪些项目和库实际上受到影响。由于 Java 的依赖机制,如果应用程序传递性地包含了易受攻击的库版本,那么该应用程序也可能受到影响。当项目 A 的直接依赖项 B 依赖于库 lib 时,项目 A 就传递性地包含了库 lib。一个简单的检查是否受影响的方法是通过 Maven 依赖树:
示例:在 Maven 项目上执行命令 mvn dependency:tree。
[INFO] exampleProject:mainProject:jar:0.0.1-SNAPSHOT
[INFO] +- exampleProject:lib-using-log4j:jar:0.0.1-SNAPSHOT:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
然而,这种检查仅是初步指示,因以下原因并不充分:
Java 程序经常:
因此,任何 Java 项目所使用的库都可能将漏洞引入你的项目。深入的字节码分析有助于解决这一问题,而这正是我们在本仓库中发布的内容。
要构建此工具,请运行
mvn compile
要组装可运行的 jar,请使用
mvn clean compile assembly:single
易受攻击类的哈希集已对整个 Maven Central 仓库进行了预计算。这些类的哈希包含我们通过指纹识别技术识别为字节码相似的所有哈希。
预计算的信息包括:
我们考虑的受影响版本范围为 [2.0-beta9, 2.15) 参考。
该工具使用一种由 Andreas Dann 发明的 Java 字节码指纹识别新技术。基本流程如下:
注意:为简化部署,本仓库确实提供了受影响类的 SHA 哈希,这些信息是通过指纹识别计算得出的。
哈希列表和 Maven 工件列表并不完整。我们将定期更新这些列表。
本工具由 CodeShield 联合创始人共同创建
欢迎反馈!
我们正在努力扩展受影响工件的列表,并始终寻求改进我们的服务。欢迎贡献
另外,如果我们的扫描程序对你有帮助,请给本仓库 ⭐️!
如果你需要支持,或者想了解我们的技术,请通过 [email protected] 联系我们。
你的 CodeShield 团队 💚