标题说明了一切。众所周知,类路径中至少有4到5个log4j jars。我如何知道我使用的是哪个版本?
发布于 2021-12-12 14:51:24
在了解到我的服务器可能容易受到新的Log4j漏洞攻击(CVE-2021-44228)后,我来到了这里。因此,我需要知道我是否安装了过时的/易受攻击的Log4j版本2。
这里之前的回答对检测旧版本没有帮助,因为它们是为了让已经运行的Java代码确定代码使用的是哪个版本的Log4j,而我需要知道是否有Java应用程序可能正在使用易受攻击的版本。
下面是我所做的:
sudo find / -name 'log4j*'它列出了我的(Linux)服务器上所有与Log4j相关的文件。这向我展示了几个1.x版本,它们不容易受到这个特定CVE的攻击,还有一个2.15.0文件,它已经包含了CVE的修复。
如果您运行此程序并发现文件或文件夹名为2.x,其中x< 15,那么您很可能存在漏洞,需要找出如何尽快更新您的文件。
注意事项
有人警告我,这对我来说还不够测试,因为Log4j文件可能隐藏在.jar文件中,而find命令无法发现该文件。
更新
下面是一个公共项目,它试图扫描所有.jar文件,以便在归档文件中也找到Log4j代码:
发布于 2016-05-25 21:39:36
这取决于ClassLoader,但是看看example,您可以在log4j的Layout类上调用getImplementationVersion方法:
org.apache.log4j.Layout.class.getPackage().getImplementationVersion()发布于 2021-12-15 08:16:01
我已经编写了一个小的Bash脚本来检查位于该服务器上的每个Log4j JAR文件的版本。它从清单文件中读取版本信息,因为信任文件名有点冒险。
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
donehttps://stackoverflow.com/questions/37438652
复制相似问题