第三方应用程序(如apache zookeeper)中的Log4j漏洞

mm9b1k5b  于 2022-11-06  发布在  Apache
关注(0)|答案(3)|浏览(159)

Apache log4j zookeeper使用易受RCE攻击的log4j 1.2。为了纠正此问题,我们计划排除log4j 1.2,并在依赖项中包含log4j 2.17.1核心和log4j 2.17.1 api
没有用。有人能建议如何从第三方库中排除jar吗

**错误:**获取此错误:线程“main”中出现异常java.lang.NoClassDefFoundError:由于以下原因造成的:(1)您的计算机上有一个或多个应用程序,您的计算机上有一个或多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上java.lang.ClassNotFoundException:在java.net中,您可以找到一个新的类加载器。

"我们试过了"

<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>
wlzqhblo

wlzqhblo1#

Zookeeper显然试图直接访问Log4j 1.2内部类,这些类在log4j-1.2-api中已经不存在了(参见源代码)。
您可以:

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

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

zkure5ic

zkure5ic2#

我想我已经弄明白了,但我还没有测试足够长的时间。
考虑到这是应用于v3.6.1 Zookeeper服务器,需要完成的工作总结如下:
1.从Zookeeper中删除旧的log4j库

  1. log4j-1.2.17.jar
  2. log4j-1.2.17.LICENSE.txt(这显然是不必要的)
    1.添加最新的log4j库,该库修复了log 4shell漏洞。
    1.与log4j1.x向后兼容的log4j 2桥:log4j-1.2-api-2.17.1.jar
    1.必要的log4j库:log4j-api-2.17.1.jarlog4j-core-2.17.1.jar
  • 通过添加以下行修改Zookeeper的服务器环境选项文件(即/zookeeper/conf/server_jvm.properties
  • -Dlog4j.configuration=/incorta/IncortaAnalytics/IncortaNode/zookeeper/conf/log4j.properties(log4j 2指向现有log4j1.x配置文件的指针,有关详细信息,请参阅下面的参考)
  • -Dzookeeper.jmx.log4j.disable=true(禁用Zookeeper对log4j1.x的JMX依赖。感谢Piotr为这个问题提供的提示)

这样做的目的是保留Zookeeper附带的sl 4j库,因为将这些库更改为与log4j 2兼容的版本对我来说并不是一个愉快的经历。
相反,我将log4j1.x库升级到log4j 2,同时还拥有log4j桥库,以使Zookeeper的过时slf 4j库能够使用最新的log4j 2库。
Reference

**更新:**使用JDK 11时,我们遇到了一个奇怪的错误,Zookeeper客户端无法连接到Zookeeper,解决方案是从类路径中删除slf4j-log4j12绑定器。

uyhoqukh

uyhoqukh3#

下面的依赖项配置似乎对我很有效:

<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>

相关问题