如何修补 Log4j2 0-day 漏洞

How to patch Log4j2 0-day exploit

我们正在使用 Java 作为我们使用 log4j2 库的服务之一。截至 2021 年 12 月 10 日,已发现利用 log4j2 为 Java 执行远程代码的漏洞。我想知道解决这个问题的最佳方法是什么?只使用另一个 Java 日志库是否合适?或者是否有 log4j2 的配置,这样我们就不必经历更改日志库的所有麻烦?

我们应该将 log4j 升级到版本 2.17.0(在 mvnrepository.com). As per the security notes (logging.apache.org) 可用,该漏洞已在 2.15.0 中修复。但是,在 2.15.0 中还有另外两个漏洞,分别在 2.16.02.17.0 中进行了修补。

如果升级(当前)不是一个选项,安全说明还列出了缓解漏洞利用的操作:

Mitigation: In releases >=2.10, this behavior can be mitigated by setting either the system property log4j2.formatMsgNoLookups or the environment variable LOG4J_FORMAT_MSG_NO_LOOKUPS to true. For releases from 2.0-beta9 to 2.10.0, the mitigation is to remove the JndiLookup class from the classpath: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class.

如果我们使用 spring-boot-starter-logging 且没有额外的配置,我们不会受到影响。有关详细信息,请参阅 spring-boot infromation on the issue (spring.io).

同样,我们在使用 quarkus 时不受影响,只要我们不显式添加 log4j 依赖项。参见 the corresponding github issue (github.com)