【发布时间】: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 个不同的操作组成:
- 首先是将 log4j2.formatMsgNoLookups 系统属性设置为 TRUE。系统的属性是什么以及在哪里?
- 或者,将环境变量 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 查找)似乎仍然包含该类。