首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能知道我使用的是什么版本的Log4J?

怎样才能知道我使用的是什么版本的Log4J?
EN

Stack Overflow用户
提问于 2016-05-25 21:26:43
回答 10查看 9.7K关注 0票数 7

标题说明了一切。众所周知,类路径中至少有4到5个log4j jars。我如何知道我使用的是哪个版本?

EN

回答 10

Stack Overflow用户

发布于 2021-12-12 14:51:24

在了解到我的服务器可能容易受到新的Log4j漏洞攻击(CVE-2021-44228)后,我来到了这里。因此,我需要知道我是否安装了过时的/易受攻击的Log4j版本2。

这里之前的回答对检测旧版本没有帮助,因为它们是为了让已经运行的Java代码确定代码使用的是哪个版本的Log4j,而我需要知道是否有Java应用程序可能正在使用易受攻击的版本。

下面是我所做的:

代码语言:javascript
复制
sudo find / -name 'log4j*'

它列出了我的(Linux)服务器上所有与Log4j相关的文件。这向我展示了几个1.x版本,它们不容易受到这个特定CVE的攻击,还有一个2.15.0文件,它已经包含了CVE的修复。

如果您运行此程序并发现文件或文件夹名为2.x,其中x< 15,那么您很可能存在漏洞,需要找出如何尽快更新您的文件。

注意事项

有人警告我,这对我来说还不够测试,因为Log4j文件可能隐藏在.jar文件中,而find命令无法发现该文件。

更新

下面是一个公共项目,它试图扫描所有.jar文件,以便在归档文件中也找到Log4j代码:

票数 51
EN

Stack Overflow用户

发布于 2016-05-25 21:39:36

这取决于ClassLoader,但是看看example,您可以在log4j的Layout类上调用getImplementationVersion方法:

代码语言:javascript
复制
org.apache.log4j.Layout.class.getPackage().getImplementationVersion()
票数 7
EN

Stack Overflow用户

发布于 2021-12-15 08:16:01

我已经编写了一个小的Bash脚本来检查位于该服务器上的每个Log4j JAR文件的版本。它从清单文件中读取版本信息,因为信任文件名有点冒险。

代码语言:javascript
复制
locs=( $(sudo find / -name 'log4j*'|grep jar) )
fcount=${#locs[@]}

echo "Found $fcount jar files"
echo " "

for (( j=0; j<${fcount}; j++ ));
do
    unzip ${locs[$j]} META-INF/MANIFEST.MF
    mv META-INF/MANIFEST.MF META-INF/MANIFEST$j.MF
done

echo " "
for (( j=0; j<${fcount}; j++ ));
do
    echo ${locs[$j]}
    tail -2 META-INF/MANIFEST$j.MF
done
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37438652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档