【问题标题】:Are there any ways to fix Log4j vulnerability when it is being used as a transitive dependency当它被用作传递依赖时,有什么方法可以修复 Log4j 漏洞
【发布时间】:2022-01-18 16:22:27
【问题描述】:

我的项目通过 org.mobicents.servlet.sip 包对 log4j v1.2.16 具有传递依赖关系,该包在我的项目中用作直接依赖项。

org.mobicents.servlet.sip 不再积极开发。

除了等待org.mobicents.servlet.sip 修复此问题外,还有其他方法可以修复此漏洞吗?

【问题讨论】:

    标签: java security log4j transitive-dependency mobicents-sip-servlets


    【解决方案1】:

    您可能想使用log4j-1.2-api bridge。为此

    1. 排除对 log4j 1.x 的依赖(注意不同的 groupid,它在 1.x 和 2.x 之间发生了变化)
    <dependencies>
      <dependency>
        <groupId>org.mobicents.servlet.sip</groupId>
        <artifactId>sip-servlets-spec</artifactId>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId><artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    
    1. 使用网桥添加对 log4j 2.17.1 的依赖
    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</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>
    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version></dependency>
    

    【讨论】:

    • 看起来 sip-servlets-spec 在旧版 log4j 上做了一些编程配置,试过这个,但似乎不起作用。谢谢。
    【解决方案2】:

    如果您使用 Maven 作为构建工具,那么您可以采取的一种方法是:

    1. 排除传递依赖并
    2. 使其成为指定最新版本的直接依赖项。

    <dependencies>
        <dependency>
        <groupId>org.mobicents.servlet.sip</groupId>
        <artifactId>sip-servlets-spec</artifactId>
        <version>4.0.128</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version>
        </dependency>
    </dependencies>

    详细解释也可以参考maven docs

    【讨论】:

    • 但是sip-servlets-spec使用log4j v1.2.17,我想升级到log4j2 v2.17.1
    • 是的,我想这应该可以正常工作。您可以这样做并检查项目中的库文件列表。如果 log4j 出现一次并且版本是最新的,那么它就完成了。
    • log4j 1.xlog4j2 是两个不同的工件,不确定您的答案如何工作
    • 是的,我明白你的意思,它们是 2 个不同的依赖项。我假设您必须使用 v2,因为 1.x 没有得到积极维护,并且现在不建议使用(从 log4j 1.x mvn 存储库中,您可以看到最后一个版本早在 2012 年,所有版本都存在漏洞)。因此,我建议您更好地使用 v2。上面代码中唯一的变化应该是排除的 artifactId 和 groupId,因为我们想从 log4jv2 替换 log4j 1.x。 ` log4jlog4j`希望你明白。
    【解决方案3】:

    最终的解决方案是炸掉log4j-1.2.17.jar,移除受影响的SocketServer.classJMSAppender.class类,创建自定义jar并使用。

    用于爆炸和创建新 jar 的命令取自以下 stackoverflow 答案

    参考:https://stackoverflow.com/a/16806235/8864570

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2022-01-23
      • 2022-01-17
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多