当前位置: 首页 > 知识库问答 >
问题:

log4j-1.2.17是否存在漏洞(无法在源代码中找到任何jndi代码)?

夏骏
2023-03-14

关于已识别的log4j jndi远程代码执行漏洞CVE-2021-44228(另请参阅参考资料),不知道log4j-v1是否存在漏洞。2也受到了影响,但我从源代码审查中得到的最接近的是JMS Appender。

问题是,虽然互联网上的帖子表明Log4j-1.2也易受攻击,但我无法找到相关的源代码。

我是否遗漏了其他人已经确认的东西?

Log4j1。2在socket server类中似乎有一个漏洞,但我的理解是,首先需要启用它才能适用,因此它不是一个被动的威胁,不像所识别的jndi查找漏洞。

这就是我的理解——Log4j-v1。2-不易受到jndi远程代码执行错误的攻击是否正确?

参考资料-

https://logging.apache.org/log4j/2.x/security.html

https://arstechnica.com/information-technology/2021/12/minecraft-and-other-apps-face-serious-threat-from-new-code-execution-bug/

https://www.cyberkendra.com/2021/12/worst-log4j-rce-zeroday-dropped-on.html

https://portswigger.net/daily-swig/log4shell-vulnerability-poses-critical-threat-to-applications-using-ubiquitous-java-logging-package-apache-log4j

更新#1-cloudflare的这篇博文也指出了与AKX相同的观点。。。。它是从log4j2引入的!

共有3个答案

寿和通
2023-03-14

除了@giraffesyo给出的答案,如果它对任何人都有帮助的话——我编写了这个bash脚本——它删除了被识别为漏洞的类(链接到Log4j dev thread),并将属性文件设置为只读——正如在redhat bugzilla thread上建议的那样

注意1-它不检查这些类在属性中的任何使用情况,它纯粹是一种查找和删除的方法-使用自担风险!

注2-这取决于安装的zip和unzip

#!/bin/bash

DIR=$1
APPLY=$2

# Classes to be searched for/removed
CLASSES="org/apache/log4j/net/SimpleSocketServer.class
org/apache/log4j/net/SocketServer.class
org/apache/log4j/net/JMSAppender.class"


PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`

usage () {
    echo >&2 Usage: ${PROGNAME} DIR [APPLY]
    echo >&2        Where DIR is the starting directory for find
    echo >&2        and   APPLY = "Y" - to perform purification
    exit 1
}

# force upper case on Apply
APPLY=$(echo "${APPLY}" | tr '[:lower:]' '[:upper:]')

# Default Apply to N
if [ "$APPLY" == "" ] ; then
   APPLY="N"
fi

# Check parameters
if [ "$DIR" == "" ] ; then
   usage
fi
echo $APPLY | grep -q -i -e '^Y$' -e '^N$' || usage

# Search for log4j jar files - for class file removal
FILES=$(find $DIR -name *log4j*jar)
for f in $FILES
do
   echo "Checking Jar [$f]"

   for jf in $CLASSES
   do
      unzip -v $f | grep -e "$jf"
      if [ "$APPLY" = "Y" ]
      then
         echo "Deleting $jf from $f"
         zip -d $f $jf
      fi
   done
done

# Search for log4j properties files - for read-only setting
PFILES=$(find $DIR -name *log4j*properties)
for f in $PFILES
do
   echo "Checking permissions [$f]"

   if [ "$APPLY" = "Y" ]
   then
      echo "Changing permissons on $f"
      chmod 444 $f
   fi

   ls -l $f
done
韦澄邈
2023-03-14

虽然不受完全相同的log4shell问题的影响,但apache log4j团队建议从jar文件中删除JMSAppenderSocketServer,后者在CVE-2019-17571中存在漏洞。

您可以使用zip命令删除受影响的类,将文件名/版本替换为您的:

zip -d log4j-1.2.16.jar org/apache/log4j/net/JMSAppender.class
zip -d log4j-1.2.16.jar org/apache/log4j/net/SocketServer.class

您可以使用less和grep浏览zip中的文件,例如less log4j-1.2。16.jar | grep JMSAppender

也就是说,如果可能的话,Apache建议您升级到2. x版本。根据他们的安全页面:

请注意,Log4j 1. x已达到生命周期结束,不再受支持。2015年8月后针对Log4j 1. x报告的漏洞未被检查,也不会修复。用户应该升级到Log4j 2以获得安全修复。

严阳成
2023-03-14

JNDI特性被添加到log4j 2.0-beta9中。

log4j1。因此,x没有易受攻击的代码。

 类似资料:
  • 关于已经在CVE-2021-44228发现的Log4j JNDI远程代码执行漏洞-(另见参考文献)-我想知道Log4j-v1.2是否也受到影响,但是我从源代码审查中得到的最接近的是JMS-Appender。 问题是,虽然互联网上的帖子表明Log4j 1.2也存在漏洞,但我找不到相关的源代码。 我是否遗漏了其他人已经确认的东西? Log4j 1.2在socket server类中似乎有一个漏洞,但我

  • 正如我们在新闻中看到的,针对流行的库报告了一个新的零日漏洞,该漏洞允许攻击者远程执行代码。在我们的应用程序中,我们仍然使用以下依赖项。 是否仅针对报告该问题?或适用于版本是否也是?是否有测试该漏洞的示例代码?

  • 我使用的是带有Scala 2.12的Databricks群集版本7.3 LTS。这个版本确实使用Log4J。 官方文件说它使用Log4J版本。这是否意味着我没有这个漏洞?如果我这样做了,我可以在集群上手动修补它,还是需要将集群升级到下一个LTS版本?

  • 问题内容: 我有大约五种这样的方法,但是由于seriesColors是静态的,所以想知道上面的代码是否会导致内存泄漏。 如果存在内存泄漏,那么该如何解决? 在这两个代码中,哪一个存在严重缺陷? 问题答案: 静态变量在类的所有实例之间共享。(使用“ new”运算符创建一个实例。) 在这些示例中;使用静态(实例变量)存储颜色可能不是一个好主意,因为实例之间会相互干扰。该变量应更改为“普通”实例变量。

  • 我目前的项目完全与大量Spring Boot容器对接。它们中的大多数都是使用log4j2(对于java8,小于2.7)版本构建的。如何充分证明来自JNDI攻击CVE-2021-45105的应用程序? 我知道最好的解决方案是用log4j版本重建这些容器,但这需要时间和预算。 但是,如果我使用下面的命令,在docker compose级别为每个容器禁用查找功能,它能工作吗? “JVM_EXTRA_OP

  • 是否存在一种“内部安全应用程序”场景,其中由于早期的Log4J版本,软件比没有它时更容易受到攻击? 我在下面概述了这个问题的一些细节。 我正在做一些工作来减轻最近Log4J漏洞的风险。我知道有一些方法涉及从组织的所有计算机、服务器、远程桌面等中删除早期Log4J jar文件的所有痕迹,在完成之前,组织被视为“处于危险之中”。然而,我也想知道如此大规模的全面努力支出是否相称[编辑22-12月21日1

  • 讲师:gh0stkey 整理:飞龙 协议:CC BY-NC-SA 4.0 原理 由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并交由服务端执行。命令注入攻击中,Web 服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的主要原因。 实例代码 <?php // code-exe.php: $code=@$_GET['code

  • 问题内容: 我试图在glibc源代码中找到select()源代码(Linux,i386架构),但我找不到任何东西(与所述体系结构有关) 谁能指出我的select()源代码? 问题答案: select()不是libc的函数,而是内核函数,因此您需要查看内核源代码。 您可以通过查看手册页来说明这一点:如果在第2节中,则为内核函数;如果在第3节中,则为标准C库的函数,在您的情况下为glibc。 编辑:像