我应该如何缓解Log4j版本1.2中的Log4Shell漏洞?

19

我有一个非常旧的Solr版本,并且一直在尝试查看它是否受到了每个人都在担心的Log4Shell漏洞CVE-2021-44228)的影响。

CVE似乎只适用于较新的版本,但同事不相信,因此我正在努力找出真相。

2个回答

23

我大约有95%的把握认为这对于旧版本的Log4j是可以的。原因如下:

  1. I'm on version 1.2. I found the Log4j JAR file on my system, unzipped it, and looked for anything mentioning JNDI:

    find / -iname '*log4j*'
    unzip /etc/opt/jetty/lib/ext/log4j-1.2.17.jar | grep -i jndi
    

    That brought back nothing, so I feel pretty good there. The CVE says that you'd normally find something by looking in the JAR file. It suggests you do:

     zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
    

    That wouldn't do anything for me.

  2. I dug through the changelog for Log4j. It says for version 2.0-beta9:

    Add JNDILookup plugin. Fixes LOG4J2-313. Thanks to Woonsan Ko.

    So I think it's safe to say that JNDI didn't exist in Log4j before then. The Jira ticket that added it is here.

  3. I checked the old manual for version 1.2 and compared it to the latest version. In the latest, there's a section for "Lookups" that explains how JNDI works. In version 1.2, that section just isn't there.

我认为这个...还可以吧?


我在任何一台机器上都找不到任何log4j文件。使用“find / -iname 'log4j'”没有任何结果,这正常吗? - Kalvin Klien
2
请记住,Log4j 1 已于2015年结束生命周期。无论是选择 Log4j 2、Logback 还是其他日志框架,都应该切换到不同的日志框架。 - Marcono1234
2
log4j 1.x似乎存在漏洞,如果使用JMSAppender。请参见https://github.com/apache/logging-log4j2/pull/608#issuecomment-990494126 - Maksim
1
建议您执行以下操作:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class。对我来说,这没什么作用。-q 是 zip 的安静操作,所以即使它找到了什么也可能不会看到任何东西。 - Scotty J
2
@Maksim,阅读这些评论,似乎log4j 1.x中的漏洞要比这里介绍的少得多。它们似乎属于“你应该升级,但你的房子没有着火”的范畴。例如,这个表明1.x漏洞取决于使用一个可能不太常见的特定配置。不过,我对Java并不是很熟悉,如果我有所遗漏,请纠正我。 - mlissner
显示剩余2条评论

8
Ralph Goers(Apache Log4J维护者)表示:

这个漏洞有两个方面。

  1. Log4j 2的查找机制(属性解析器)被执行在被记录日志的消息文本上。这意味着,如果应用程序记录用户输入(几乎所有人都这样做),则用户可以使查找机制被调用。
  2. Log4j 2在各个地方支持JNDI,包括作为查找。JNDI本身非常不安全。这些的联合效果是使其成为Log4j 2的关键性问题。Log4j 1和Logback都有使用JNDI的组件,并且两者都没有采取任何措施来限制JNDI的漏洞。在Log4j 1的情况下,这是JMS Appender。暴露面较小但仍然存在。如果某人能够访问日志记录配置,则可能会导致糟糕的结果。

因此,结论是Log4J 1.x是安全的,没有受到Log4Shell的影响,除非您使用JMS appender。在这种情况下,您必须分析在appender中所做的内容。


我们在1.2中不使用JMS appender,日志配置仍然可以访问它吗? - rinilnath
1
有人因1.x log4j中的socket server类而缓解了CVE-2019-17571吗? - rinilnath
2
参考链接在哪里?我似乎找不到Goers发布的地方。 - trash80
1
你必须相信我。Goers的回答已经发给了我。但是这是一个指向Bugzilla的链接,内容与之前相同:https://bugzilla.redhat.com/show_bug.cgi?id=2031667 - robob
结论是什么?这句话似乎没有以任何方式回答问题(“如何在Log4j 1.2版本中缓解Log4Shell漏洞?”或者它是否只影响较新的Log4j版本,而不是这个旧版本)。如果有的话,那就非常不清楚了。也许可以在答案中添加一些自己的话?(但是不要加上“编辑:”、“更新:”或类似的内容——答案应该看起来像是今天写的。) - Peter Mortensen
第二点对我来说很清楚。但总结一下:Log 1.x是安全的,但如果您使用JMS appender,则必须注意。 - robob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接