将Apache Solr 8.10.1 log4j 2.14.1版本升级到2.15以解决严重漏洞

kyxcudwk  于 2022-11-05  发布在  Solr
关注(0)|答案(7)|浏览(234)

最近发现了一个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文件是否安全?或者,推荐的升级步骤是什么?

ohtdti5x

ohtdti5x1#

您指向的链接是Solr的旧版本(6.6而不是8.10.1)。正确的版本是https://solr.apache.org/guide/8_10/configuring-logging.html,其中提到使用log4j 2。
文件log4j2.xml(甚至是log4j.properties)配置日志本身,而不是log4j的版本,所以更新该文件是无关紧要的。
以下是项目页面的建议:

2021年12月10日,Apache Solr受到Apache Log4J CVE-2021-44228的影响

...

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

...

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

  • 升级到Solr 8.11.1或更高版本(如果可用),其中将包括log4j 2依赖项的更新版本。
  • 手动更新运行时类路径上log4j 2的版本,然后重新启动Solr应用程序。
  • (Linux/Mac OS)编辑您的solr.in.sh档案以包括:SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=真”
  • (Windows)编辑solr.in.cmd文件以包括:设置SOLR_OPTS=%SOLR_OPTS% -Dlog4j2.formatMsgNoLookups=真
  • 遵循https://logging.apache.org/log4j/2.x/security.html中列出的任何其他戒律

您所建议的(覆盖文件夹“\solr-8.10.1\server\lib\ext”中的现有jar)看起来像是第二种方法,所以它可能会工作得很好。

bnlyeluc

bnlyeluc2#

用lib/ext中相应的2.15版本替换所有的jar,然后重新启动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
ou6hu8tu

ou6hu8tu3#

我在我的/opt/solr-7.4.0/server/lib/ext文件夹中将我所有的log4j jar从2.11更新到2.15,我没有看到任何问题。

bsxbgnwa

bsxbgnwa4#

the new CVESOLR_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
pu82cl6c

pu82cl6c5#

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

q3aa0525

q3aa05256#

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

  • 升级到Solr 8.11.1或更高版本(如果可用),其中将包括Log4J依赖项的更新版本(〉= 2.17.0)。
  • 如果您正在使用Solr的官方Docker映像,则已在Docker Hub上列出的所有支持版本中进行了缓解:https://hub.docker.com/_/solr。您可能需要重新提取映像。
  • 手动更新运行时类路径上的Log4J版本,然后重新启动Solr应用程序。
  • (Linux/Mac OS)编辑您的solr.in.sh档案以包括:SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=真”
  • (Windows)编辑solr.in.cmd文件以包括:设置SOLR_OPTS=%SOLR_OPTS% -Dlog4j2.formatMsgNoLookups=真
  • 遵循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的最新包所替换。

  • % SORRINST %\solr\贡献\普罗米修斯导出器\lib\log4j-api-2.11.2.jar
  • % SORRINST %\solr\contrib\普罗米修斯导出器\lib\log4j-core-2.11.2.jar
  • 这是一个很好的解决方案,它可以帮助您创建一个新的应用程序。
  • 服务器端数据库
  • 服务器文件夹
  • 服务器文件夹
  • 服务器文件夹
  • 服务器文件夹
dgjrabp2

dgjrabp27#

如果您将Solr作为一个docker运行,您可以做的是在从jar中删除JndiLookup.class之后,挂载Solr映像中使用的相同的log4j-core版本。
让我来介绍一下我使用过的步骤。

  • 找到Solr镜像正在使用的log4j-core版本。你可以通过在你的Solr运行主机上执行以下命令或者在进入你的Solr容器之后来完成

查找/ -名称“log4j-core-*.jar”

  • 根据Solr安全新闻页面,我们可以忽略prometheus-exporter路径,剩下的是server/lib/ext/路径
  • 复制那个特定的.jar文件,或者从Internet下载相同的版本。
  • 将该jar文件复制到运行主机的Solr容器中,并使用此log4j-detector检查其漏洞状态。
  • 使用上面提到的工具检查漏洞并不复杂。您需要做的是将log4j-detector-2021.12.16.jar文件下载到一个可访问的位置,并对log4j-core jar文件运行命令。

java -jar log4j-检测器-2021.12.16.jar 8.4.1-扩展名〉hits_8.4.1_扩展名. txt
然后,您将得到如下输出,表示它易受攻击。
/ext/log4j-core-2.11.2.jar文件中包含的日志文件的大小〉= 2.10.0***:-(

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

一个日志文件,它是一个日志文件,它是一个日志文件,它是一个日志文件。

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

/ext/log4j-core-2.11.2.jar包含Log4J-2.x〈= 2.0-beta 8 * 潜在安全 *:-|(或者您是否已经删除了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和环境变量更新属性,因为它很好很干净。

相关问题