Elasticsearch 5.6.16 用 2.16 修补 log4j

分享于2022年07月17日 elasticsearch log4j 问答
【问题标题】:Elasticsearch 5.6.16 用 2.16 修补 log4j(Elasticsearch 5.6.16 patch log4j with 2.16)
【发布时间】:2022-01-19 02:09:46
【问题描述】:

由于 log4j 漏洞,我需要修补无法立即更新的 elasticsearch 5.6.16 实例。

docker镜像使用:

  • /usr/share/elasticsearch/lib/log4j-core-2.11.1.jar
  • /usr/share/elasticsearch/log4j-core-2.11.1.jar

elasticsearch 5.6.16 可以与 log4j-core-2.16 一起使用吗?

用可以在这里找到的核心 jar 替换两者的正确方法是 https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.16.0/ 吗?


【解决方案1】:

根据 official security announcement ,如果你在5.6.16上运行,你不需要升级Log4J,只需设置 following JVM option

-Dlog4j2.formatMsgNoLookups=true

作为额外的缓解措施,您还可以使用以下方法从 log4j JAR 中删除 JndiLookup 类:

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

  • 不幸的是, -Dlog4j2.formatMsgNoLookups=true 不再完全安全了 lists.apache.org/thread/83y7dx5xvn3h5290q1twn16tltolv88f 。我现在已经删除了这个类,但想知道为什么这不会以错误结束。如何在运行应用程序时删除代码而不遇到异常?
  • 您引用的链接提到该选项不适用于“某些非默认配置”,因此如果您的配置是默认配置,您可以安全地应用它。至于删除 JndiLookup 类,这是一个 hack,但这是 Elastic 在他们最新的补丁版本中所做的。