当它被用作传递依赖时,有什么方法可以修复 Log4j 漏洞

Are there any ways to fix Log4j vulnerability when it is being used as a transitive dependency

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

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

除了等待 org.mobicents.servlet.sip 修复此问题之外,是否有任何修复此漏洞的选项。

如果您使用 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

您可能想要使用 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. 使用 bridge
  2. 添加对 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>

最终解决方案是分解 log4j-1.2。17.jar,删除受影响的 类 SocketServer.classJMSAppender.class,创建一个自定义 jar 并使用它。

用于展开和创建新 jar 的命令取自下面的 Whosebug 答案

参考: