pfichtner/log4shell-hunter

GitHub: pfichtner/log4shell-hunter

基于字节码分析的本地文件Log4Shell漏洞扫描器,能够检测被重打包、混淆或嵌入的易受攻击log4j版本。

Stars: 6 | Forks: 4

# log4shell-hunter [![Java CI with Maven](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1d6c611092215213.svg)](https://github.com/pfichtner/log4shell-hunter/actions/workflows/maven.yml) [![GitLicense](https://gitlicense.com/badge/pfichtner/log4shell-hunter)](https://gitlicense.com/license/pfichtner/log4shell-hunter) [![Known Vulnerabilities](https://snyk.io/test/github/pfichtner/log4shell-hunter/badge.svg?targetFile=pom.xml)](https://snyk.io/test/github/pfichtner/log4shell-hunter?targetFile=pom.xml) [![codecov](https://codecov.io/gh/pfichtner/log4shell-hunter/branch/main/graph/badge.svg?token=9KPRQO35RS)](https://codecov.io/gh/pfichtner/log4shell-hunter) [![BCH compliance](https://bettercodehub.com/edge/badge/pfichtner/log4shell-hunter?branch=main)](https://bettercodehub.com/) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fpfichtner%2Flog4shell-hunter.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fpfichtner%2Flog4shell-hunter?ref=badge_shield) 你是否担心 JAR 文件甚至商业(例如闭源)应用程序中包含了(经过 shaded 处理的)易受攻击的 log4j 版本,或者你的开发人员在他们的一些项目中复制了易受攻击的 log4j 类?这是大多数扫描器会出现漏报(false negatives)的地方,因为它们依赖于描述 log4j 版本的元数据(如 pom.xml)。 该扫描器进行字节码分析!因此它**不**依赖于: - 经过指纹识别的 jar 文件 - 经过指纹识别的 class 文件 - 类名(例如 ```JndiLookup```) - pom 文件/pom 条目 因此,即使出现以下情况,log4shell-hunter 也能找到易受攻击的 log4j 版本: - log4j 的源代码已被第三方编译(无论使用何种编译器/编译器版本) - log4j(或其部分)已被包含/复制到其他 jar 中 - log4j 被重新打包(uberjar、fatjar),即使包已被重命名,例如 org.apache.logging -> org.acme.foo.logger.bar 扫描器分析 jar 包并尝试检测: - 带有 log4j Plugin 注解 ```org.apache.logging.log4j.core.config.plugins.Plugin``` 的类。 - 即使 Plugin 已被重命名甚至混淆(取决于 log4shell-hunter 的模式参数),这依然有效 ### 用法 示例用法 ``` find \( -name "*.jar" -o -name "*.zip" -o -name "*.ear" -o -name "*.war" \) -exec java -jar log4shell-hunter-0.0.3.jar -m obfuscatorComparator {} \; ``` 示例输出 ``` ./log4j-samples/true-hits/springboot-executable/spiff-0.0.1-SNAPSHOT.war > Possible 2.1+ match found in class org.apache.logging.log4j.core.lookup.JndiLookup in resource /WEB-INF/lib/log4j-core-2.10.0.jar ``` 模式可以设置为 ```defaultComparator```、```repackageComparator```、```obfuscatorComparator``` 之一。 - defaultComparator:Log4j 类必须与预期的类名+包名完全匹配。其方法也是如此。 - repackageComparator:Log4j 类必须与预期的名称匹配,但会忽略包名。方法名必须完全匹配(**默认**) - obfuscatorComparator:log4shell-hunter 不依赖任何类或方法名称,而是尝试通过某些标准检测 log4 类。即使 jar 被混淆,此模式也能找到重新打包的 log4j ### 从源码构建 ``` git clone https://github.com/pfichtner/log4shell-hunter.git cd log4shell-hunter/ # 使用包含的 maven wrapper 构建 # 当然,你也可以使用本地安装的 "mvn" 而不是 maven wrapper "./mvnw" ./mvnw package java -jar target/log4shell-hunter-0.0.3.jar ``` ### 许可证 [GNU General Public License v3.0](LICENSE.txt)
标签:CVE-2021-44228, FatJar扫描, GHAS, Go语言工具, Java安全, JNDI注入, JS文件枚举, Log4j, Log4Shell, PE 加载器, UberJar扫描, 云安全监控, 加密, 反混淆, 后门检测, 域名枚举, 域名枚举, 文档安全, 漏洞扫描器, 网络安全, 隐私保护, 静态分析