【问题标题】:Doubts about mitigations to Apache's Log4j library vulnerability对缓解 Apache 的 Log4j 库漏洞的怀疑
【发布时间】:2022-01-19 23:43:33
【问题描述】:

2021 年 12 月 9 日,与 Apache 的 Log4j 库相关的一个严重漏洞被披露。 The vulnerability is detailed here。在此链接中提到了可能的缓解措施。我希望你能帮助我解决以下问题(如果我的问题听起来太琐碎,我提前道歉):

缓解 1: 将系统属性 log4j2.formatMsgNoLookups 或环境变量 LOG4J_FORMAT_MSG_NO_LOOKUPS 设置为 true。这由 2 个不同的操作组成:

  1. 首先是将 log4j2.formatMsgNoLookups 系统属性设置为 TRUE。系统的属性是什么以及在哪里?
  2. 或者,将环境变量 LOG4J_FORMAT_MSG_NO_LOOKUPS 设置为 TRUE。从外观上看,这就像运行它一样简单:export LOG4J_FORMAT_MSG_NO_LOOKUPS=true。在不使用 Log4j 库的系统上创建该环境变量是否有问题?

缓解 2: 可以修改所有 PatternLayout 模式以将消息转换器指定为 %m{nolookups} 而不仅仅是 %m。也就是说,您必须使用%m{nolookups},而不是使用%m,并且这是在所有PatternLayout 模式中完成的。 In this place Log4j 库的可能配置文件已列出。我设法找到了这个 /usr/lib/appdynamics-php5/proxy/conf/logging/log4j2.xml,其中包含多行,如下所示:<PatternLayout pattern="[%t] %d{DATE} %5p %c - %m%n"/>。我猜它只是在需要运行此缓解措施的那些配置文件中,而不是在其他地方,对吗?

缓解 3: 从类路径中删除 JndiLookup 类。例如:zip -q -d log4j-core-.jar org/apache/logging/log4j/core/lookup/JndiLookup.class。我在任何地方都找不到名为 JndiLookup.class 的文件。我想如果它不存在,您不必寻找其他任何东西,并且这种可能的缓解措施不适用,对吗?

【问题讨论】:

  • "我想如果它不存在";你在使用log4j-core 但还没有找到课程吗?那么听起来你可能忽略了它,因为即使是最新的 Log4j 版本(目前是 2.17.0,虽然默认情况下禁用了 JNDI 查找)似乎仍然包含该类。

标签: log4j log4j2


【解决方案1】:

https://access.redhat.com/security/cve/CVE-2021-45046 是在您提到的第一个问题之外发布的。
缓解 1 不能解决此问题。
我不确定缓解 2,但由于它只是一种配置与缓解 1 相同效果的本地方式,我也希望它不会保护您免受此漏洞的影响。
缓解 3 应该仍然有效,与删除的 JndiLookup.class 一样,从 Internet 加载数据的类将丢失。但是,缺少类的攻击应该引发异常。您的应用程序应该很健壮,不会因此而崩溃。

目前最好的缓解措施是更新到 log4j 2.17.0。随时了解最新发布的新闻和新漏洞。可能是将来发布了新的漏洞,您必须再次更新到较新的版本。

【讨论】:

  • 缓解 3 不会引发异常,因为可用查找列表是在运行时通过注释扫描过程创建的。如果JndiLookup 不存在${jndi:something} 将退回到默认查找(配置文件中的属性)或返回null
猜你喜欢
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2022-01-22
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多