【问题标题】:Upgrade Apache Solr 8.10.1 log4j 2.14.1 version to 2.15 to address critical vulnerability将 Apache Solr 8.10.1 log4j 2.14.1 版本升级到 2.15 以解决严重漏洞
【发布时间】:2022-01-17 01:53:13
【问题描述】:

最近发现了critical log4j vulnerability

我想升级当前 Solr 实例使用的 log4j,所以我checked here。 但是,我在“/server/resources/”文件夹中看不到log4j.properties 文件。 我看到的只有:

  • jetty-logging.properties
  • log4j2.xml
  • log4j2-console.xml

这些文件都不包含版本。那么要升级,下载最新版本的log4j并覆盖文件夹“\solr-8.10.1\server\lib\ext”中的现有jar是否安全,或者推荐的升级步骤是什么?

【问题讨论】:

  • 包含版本的文件应该在您的目录 server/lib/ext 和 contrib/prometheus-exporter/lib 中,并且这些 - 所有 JAR - 都需要替换。
  • 官方信息现已发布:solr.apache.org/…

标签: java solr log4j


【解决方案1】:

您指向的链接适用于旧版本的 Solr(6.6 而不是 8.10.1)。正确的版本是https://solr.apache.org/guide/8_10/configuring-logging.html,它提到使用 log4j 2。

文件 log4j2.xml(甚至是 `log4j.properties)配置日志本身,而不是 log4j 的版本。所以更新那个文件是无关紧要的。

这里是what the project page recommends

2021-12-10,Apache Solr 受 Apache Log4J CVE-2021-44228 影响

...

说明: 8.11.1 之前的 Apache Solr 版本使用易受 RCE 攻击的 Apache Log4J 库的捆绑版本。有关完整影响和其他详细信息,请参阅 Log4J 安全页面。

...

缓解:以下任何一项都足以防止 Solr 服务器出现此漏洞:

  • 升级到 Solr 8.11.1 或更高版本(如果可用),其中将包括 log4j2 依赖项的更新版本。
  • 手动更新运行时类路径上的 log4j2 版本并重新启动 Solr 应用程序。
  • (Linux/MacOS) 编辑您的 solr.in.sh 文件以包含:SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=true"
  • (Windows) 编辑您的 solr.in.cmd 文件以包括:set SOLR_OPTS=%SOLR_OPTS% -Dlog4j2.formatMsgNoLookups=true
  • 遵循https://logging.apache.org/log4j/2.x/security.html 中列出的任何其他缓解措施

您提出的建议(覆盖文件夹“\solr-8.10.1\server\lib\ext”中的现有 jar)似乎是第二种方法,因此它应该可以正常工作。只需确保这是包含 log4j 依赖项的正确位置。

【讨论】:

  • 谢谢。我删除了旧的罐子并用新的罐子代替。现在有没有办法验证一切都是安全的?
  • @Adam 只要您的安装中没有旧 jar 并且只有 2.15 新版本,应该没问题。 This tool 也有帮助,但没试过。
  • @Adam 您可以在特定端口上放置一个 TCP 侦听器(例如 ncat)并提交带有违规字符串的查询,以验证 Solr 在记录时没有建立连接。 hectorcorrea.com/blog/log4shell-and-solr/88
  • 按照此处的说明进行操作。但重新启动后,我不断收到SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.。关于我还能做些什么来解决它的任何建议?
  • 好的,通过在类路径中添加 slf4j-simple-*.jar 来解决它
【解决方案2】:

我将 /opt/solr-7.4.0/server/lib/ext 文件夹中的所有 log4j jar 从 2.11 更新到 2.15,但没有发现任何问题。你的方法似乎奏效了。

【讨论】:

  • 您是直接替换它们而不重命名文件还是将所有 2.15 重命名为 2.11?
  • 我删除了所有后缀为2.11的文件,添加了后缀为2.15的文件。我没有重命名任何文件。我只是添加和删除。
【解决方案3】:

在 lib/ext 中将所有 jar 替换为对应的 2.15 版本并重新启动 solr。似乎工作。

  1. log4j-api-2.11.0.jar
  2. log4j-core-2.11.0.jar
  3. log4j-1.2-api-2.11.0.jar
  4. log4j-slf4j-impl-2.11.0.jar

【讨论】:

  • 您是直接替换它们而不重命名文件,还是将所有 2.15 重命名为 2.11?
  • 从哪里获得所有特定的罐子?
  • 它会影响对 solr 的任何依赖吗?
【解决方案4】:

对于 Solr 版本 8.6.4,我现在通过简单地交换“Solr\server\lib\ext”下的 5 个 log4j*.jar 文件对 log4j2 2.16 进行了更新。此外,我还必须将 slf4j-api.jar 更新到 1.7.24 版。这似乎开箱即用。

下载链接:

->updated lib files

【讨论】:

    【解决方案5】:

    缓解:以下任何一项都足以防止 Solr 服务器出现此漏洞:

    • 升级到 Solr 8.11.1 或更高版本(如果可用),这将 包括 Log4J 依赖项的更新版本 (>= 2.17.0)。

    • 如果 您正在使用 Solr 的官方 docker 镜像,它已经 在 Docker Hub 上列为支持的所有版本中得到缓解: https://hub.docker.com/_/solr。您可能需要重新拉取图像。

    • 在运行时类路径上手动更新 Log4J 的版本,并 重新启动 Solr 应用程序。

    • (Linux/MacOS) 编辑你的 solr.in.sh 要包含的文件:SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=true"

    • (Windows) 编辑您的 solr.in.cmd 文件以包含:set SOLR_OPTS=%SOLR_OPTS% -Dlog4j2.formatMsgNoLookups=true

    • 关注https://logging.apache.org/log4j/2.x/security.html 中列出的任何其他缓解措施

    参考:https://solr.apache.org/security.html#apache-solr-affected-by-apache-log4j-cve-2021-44228

    在我的情况下,以下 jar 受到影响,并被直接来自 Apache 的最新包替换。使用log4j detector 之类的东西来识别受影响的罐子。

    • %SOLRINST%\solr\contrib\prometheus-exporter\lib\log4j-api-2.11.2.jar
    • %SOLRINST%\solr\contrib\prometheus-exporter\lib\log4j-core-2.11.2.jar
    • %SOLRINST%\solr\contrib\prometheus-exporter\lib\log4j-slf4j-impl-2.11.2.jar
    • %SOLRINST%\solr\server\lib\ext\log4j-1.2-api-2.11.2.jar
    • %SOLRINST%\solr\server\lib\ext\log4j-api-2.11.2.jar
    • %SOLRINST%\solr\server\lib\ext\log4j-core-2.11.2.jar
    • %SOLRINST%\solr\server\lib\ext\log4j-slf4j-impl-2.11.2.jar
    • %SOLRINST%\solr\server\lib\ext\log4j-web-2.11.2.jar

    【讨论】:

    【解决方案6】:

    如果您将 Solr 作为 docker 运行,您可以在从 jar 中删除 JndiLookup.class 后,在外部挂载与 Solr 映像中使用的相同的 log4j-core 版本。

    让我来看看我用过的步骤。

    • 找到 Solr 映像正在使用的 log4j-core 版本。您可以通过在运行 Solr 的主机中或进入 Solr 容器后执行以下命令来完成此操作

      find / -name "log4j-core-*.jar"

    • 在那里你会得到两条路径。根据Solr security news page,我们可以忽略prometheus-exporter路径。剩下的就是server/lib/ext/路径

    • 复制该特定 .jar 文件或从 Internet 下载相同版本。我已经用log4j-core-2.11.2.jar测试了这个

    • 将该 jar 文件复制到运行 Solr 容器的主机中,并使用此 log4j-detector 检查其漏洞状态。

    • 使用上述工具检查该漏洞并不复杂。您需要做的是将该 log4j-detector-2021.12.16.jar 文件下载到可访问的位置,然后针对您的 log4j-core jar 文件运行命令。

      java -jar log4j-detector-2021.12.16.jar 8.4.1-ext > hits_8.4.1_ext.txt

    然后你会得到如下输出,说它是易受攻击的。

    /ext/log4j-core-2.11.2.jar 包含 Log4J-2.x >= 2.10.0 易受攻击 :-(

    • 现在让我们从 log4j-core jar 文件中删除 JndiLookup.class

      zip -q -d 8.4.1-ext/ext/log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

    • 然后,针对同一个 log4j-core jar 文件再次检查漏洞,您将能够看到如下所示的内容。

    /ext/log4j-core-2.11.2.jar 包含 Log4J-2.x POTENTIALLY_SAFE :-| (或者您是否已经删除了 JndiLookup.class?)

    这意味着 JndiLookup.class 删除已成功完成。

    • 让我们使用 docker-compose.yaml 挂载 log4j-core jar 文件

      卷:

      -./log4j-core-2.11.2.jar:/opt/solr-8.4.1/server/lib/ext/log4j-core-2.11.2.jar

    • 现在,重新启动您的 Solr docker 容器。


    我个人的偏好是使用带有环境变量的SOLR_OPTS 更新属性,因为它既漂亮又干净。

    【讨论】:

      【解决方案7】:

      使用the new CVE SOLR_OPTS 是不够的。升级到 2.17 似乎是最好的选择。这对我们有用。

      sudo find / -name "*log4j*"
      cd /app/solr/solr-7.7.0/server/lib/ext/
      sudo curl https://dlcdn.apache.org/logging/log4j/2.17.0/apache-log4j-2.17.0-bin.zip --output apache-log4j-2.17.0-bin.zip
      sudo unzip apache-log4j-2.17.0-bin.zip
      sudo rm log4j-*-2.11*
      sudo cp apache-log4j-2.17.0-bin/{log4j-1.2-api-2.17.0.jar,log4j-api-2.17.0.jar,log4j-core-2.17.0.jar,log4j-slf4j-impl-2.17.0.jar} ./
      sudo chown solr:solrgrp *
      sudo chmod 755 *
      sudo service solr restart
      
      cd /app/solr/solr-7.7.0/contrib/prometheus-exporter/lib/
      sudo rm log4j-*-2.11*
      sudo cp /app/solr/solr-7.7.0/server/lib/ext/apache-log4j-2.17.0-bin/{log4j-api-2.17.0.jar,log4j-core-2.17.0.jar,log4j-slf4j-impl-2.17.0.jar} ./
      sudo chown solr:solrgrp *
      sudo chmod 755 *
      sudo service solr restart
      

      【讨论】:

        猜你喜欢
        • 2012-06-07
        • 2022-01-19
        • 1970-01-01
        • 2022-01-16
        • 2022-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多