【问题标题】:Log4j Vulnerability in 3rd party applications like apache zookeeperApache Zookeeper 等第三方应用程序中的 Log4j 漏洞
【发布时间】:2022-02-15 04:19:02
【问题描述】:

Apache log4j zookeeper 使用易受 RCE 攻击的 log4j 1.2。 为了解决这个问题,我们计划排除 log4j 1.2 并在依赖项中包含 log4j 2.17.1 核心和 log4j 2.17.1 api

它没有帮助。有人可以建议如何从第三方库中排除 jars

错误: 得到这个错误: 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/log4j/jmx/HierarchyDynamicMBean 在 org.apache.zookeeper.jmx.ManagedUtil.registerLog4jMBeans(ManagedUtil.java:50) 在 org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:91) 在 org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:61) 在 org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:125) 在 org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79) 引起:java.lang.ClassNotFoundException:org.apache.log4j.jmx.HierarchyDynamicMBean 在 java.net.URLClassLoader.findClass(URLClassLoader.

我们试过这个..

<dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.1-alpha</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.17.1</version>
        </dependency>
    </dependencies>

【问题讨论】:

  • 管理直接或传递依赖是类似的。请在您的问题中解释您尝试了什么以及它是如何不起作用的。
  • 我已经编辑了我的帖子

标签: log4j log4j2 apache-zookeeper log4shell


【解决方案1】:

Zookeeper 显然正在尝试直接访问 Log4j 1.2 内部类,这些类在 log4j-1.2-api 中不再存在(参见 source code)。

你可以:

  • 或者将系统属性zookeeper.jmx.log4j.disable设置为true
  • 或升级到较新的版本(例如 3.5.9),它将自动检测 HierarchyDynamicMBean 类的缺失。

无论如何您都应该升级,因为您使用的 alpha 版本有几个安全漏洞:cf. Maven Repository.

【讨论】:

  • 我们尝试了这两种解决方案,但错误是一样的。
  • 这对我很有帮助。但是即使我使用的是 Zookeeper 3.6.1,我仍然必须禁用 log4j JMX。请检查我的答案,了解对我有用的完整解决方案。
【解决方案2】:

我相信我已经弄明白了,但我测试的时间还不够长。

考虑到这是应用于 v3.6.1 Zookeeper 服务器,需要做的总结是:

  1. 从 Zookeeper 中删除旧的 log4j 库
    1. log4j-1.2.17.jar
    2. log4j-1.2.17.LICENSE.txt(这显然没有必要)
  2. 添加最近修复了 log4shell 漏洞的 log4j 库。
    1. 向后兼容 log4j1.x 的 log4j2 桥:log4j-1.2-api-2.17.1.jar
    2. 必要的 log4j 库:log4j-api-2.17.1.jar & log4j-core-2.17.1.jar
  3. 通过添加以下行来修改 Zookeeper 的服务器环境选项文件(即/zookeeper/conf/server_jvm.properties
    • -Dlog4j.configuration=/incorta/IncortaAnalytics/IncortaNode/zookeeper/conf/log4j.properties(log4j2 指向现有 log4j1.x 配置文件的指针,有关详细信息,请参阅下面的参考)
    • -Dzookeeper.jmx.log4j.disable=true(禁用 Zookeeper 对 log4j1.x 的 JMX 依赖。感谢 Piotr 提供他针对此问题提到的提示)

这样做的原因是它保留了 Zookeeper 附带的 sl4j 库,因为将这些库更改为与 log4j2 兼容的版本对我来说并不是一个愉快的体验。

相反,我将 log4j1.x 库升级到 log4j2,同时还拥有 log4j 桥接库,以使 Zookeeper 过时的 slf4j 库能够使用最近的 log4j2 库。

Reference

【讨论】:

    【解决方案3】:

    以下依赖配置似乎对我有用:

            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.7.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.17.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.17.1</version>
            </dependency>
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 这也不起作用 va.lang.NoClassDefFoundError: com/codahale/metrics/Reservoir at org.apache.zookeeper.metrics.impl.DefaultMetricsProvider$DefaultMetricsContext.lambda$getSummary$2(DefaultMetricsProvider.java:126 ) 在 java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) 在 org.apache.zookeeper.metrics.impl.DefaultMetricsProvider$DefaultMetricsContext.getSummary(DefaultMetricsProvider.java:122) 在 o
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2022-01-22
    • 2022-01-19
    • 2020-11-25
    • 1970-01-01
    • 2018-11-24
    • 2022-01-16
    • 2022-01-18
    相关资源
    最近更新 更多