sharetwitterlinkedIn

Apache Pulsar 与 StreamNative 产品针对 Log4j 漏洞解决方案

December 29, 2021
head img

*此文于 12 月 21 日更新,详细添加了最新的 Log4j 漏洞如何影响其他 Pulsar 生态系统工具、StreamNative Cloud 和 StreamNative Platform 的详细信息。

上周末,Apache 开源项目 Log4j 2.16.0 被曝出新的漏洞,Log4j 紧急发布 2.17.0 版本。本文为大家提供最新版 Apache Pulsar 有关 Log4Shell 关键漏洞(即 log4j)的更新。以下列举了开源版本 Apache Pulsar 和 StreamNative 产品中漏洞的状态,以及需要解决安全漏洞所需采取的措施。

如果您有任何问题与疑问,请在 https://support.streamnative.io 上填充表单或发送电子邮件至 support@streamnative.io 获取 StreamNative 支持。

Apache Pulsar 开源项目状态更新

目前总共发现了三个影响 log4j 的 CVE。在这三个漏洞中,默认情况下只有两个影响 Apache Pulsar。Pulsar 社区一直在努力修补所有三个 CVE 造成的漏洞影响。截至目前,Pulsar 版本 2.9.1 和 2.8.2 已更新 log4j 版本并解决所有已知漏洞造成的影响。Pulsar 2.7 和 2.6 的新版本发布正在进行中。

下表总结了 log4j 漏洞的影响和解决漏洞影响的操作。

CVE Description Pulsar Impact How to mitigate
CVE-2021-44228 此漏洞允许外部对易受攻击的系统版本中执行远程代码执行(RCE) 攻击。该漏洞也可能导致数据/secret 泄露。Log4j 2.15.0 版本修复了此问题。 默认情况下,2.9.1 或 2.8.2 之前的 Pulsar 版本容易受到攻击。然而,目前(在使用 Docker 镜像或最新的 JRE 的情况下)未发现任何已知的 RCE 威胁,但数据或Secret 可能通过环境变量泄漏。 Suggest
- 建议更新至 Pulsar 2.9.1 或 2.8.2 版本
- 并且添加 formatMsgNoLookups 属性或 LOG4J_FORMAT_MSG_NO_LOOKUPS 环境变量
CVE-2021-45046 如果使用某些 log4j 格式配置,此漏洞能够绕过通过 formatMsgNoLookups 实施的解决措施。这是 log4j 2.15.0 中的一个不完整的修复所造成的,添加某些额外的配置后该漏洞会导致和第一个 CVE 相同的风险。Log4j 2.16.0 版本修复了这个问题。 默认情况下,Pulsar 不会受到攻击;除非用户使用 “进程” 运行时配置了 Pulsar Functions 或者配置了非标准的 log4j 格式。请参阅非标准 log4j 配置的更多详细信息。
- 更新至 Pulsar 2.9.1 或 2.8.2 版本
- 或者禁用 Pulsar Functions 进程运行时或删除非标准日志格式
CVE-2021-45105 当用户使用某些 log4j 格式配置时该漏洞会导致系统存在被 DoS 攻击的风险。在 log4j 2.16.0 中该漏洞依然存在。Log4j 2.17.0 版本修复了这个问题。 默认情况下,Pulsar 不会受到攻击,除非用户使用 “进程” 运行时配置了 Pulsar Functions 或者配置了非标准的 log4j 格式。请参阅非标准 log4j 配置的其他详细信息。
- 更新至 Pulsar 2.9.1 或 2.8.2 版本 OR
- 或者禁用 Pulsar Functions 进程运行时或删除非标准日志格式

StreamNative 产品状态更新

StreamNative 致力于为所有客户快速解决和修补这些问题。下表提供了有关当前 StreamNative 产品状态的更新及建议用户操作的详细信息。

产品 状态 建议用户操作 未来动向
StreamNative Cloud Hosted 自 12 月 10 日起已完全解决 无需任何操作 作为定期维护工作的一部分,StreamNative 将在未来几周内将所有集群升级到带有 log4j 2.17.0 的 Pulsar 版本。不会对客户产生任何影响。

虽然 formatMsgNoLookups 解决措施足够修复漏洞,但 StreamNative 会确保所有集群都运行最新版本的 Pulsar。

StreamNative Cloud Managed 自 12 月 15 日起,所有集群均已完全解决漏洞带来的影响。针对特殊情况,StreamNative 技术团队已另行直接沟通。 一些客户可能会收到有关使用 Java Pulsar Functions 时需要采取的额外操作的信息。具体内容请参阅下文。 作为定期维护工作的一部分,StreamNative 将在未来几周内将所有集群升级到带有 log4j 2.17.0 的 Pulsar 版本。不会对客户产生任何影响。

虽然 formatMsgNoLookups 解决措施足够修复漏洞,但 StreamNative 会确保所有集群都运行最新版本的 Pulsar。

StreamNative Platform 我们已于 12 月 13 日联络沟通如何解决漏洞造成的影响(通过 formatMsgNoLookups 方式)。StreamNative Platform 已于 12 月 13 日针对 Pulsar 2.8 分支版本筹备了新的发布版本。 可以通过使用 formatMsgNoLookups 配置直接更新部署配置文件(values 文件)(参见后文的详细信息)或升级到 sn-platform 2.8.1.29 之后的版本来解决漏洞造成的影响。具体内容请参阅下文。 将向 helm charts 部署一个版本,所有集群将默认应用这些变更。此版本预计在未来 1-2 周内发布。
Support 我们已于 12 月 13 日联络沟通如何解决漏洞造成的影响(通过 formatMsgNoLookups 方式)。 可以通过设置 formatMsgNoLookups 属性或将开源版本 Pulsar 更新到 2.9.1 或 2.8.2 版本(最终 RC 版本验证中)来解决。具体内容请参阅下文。 开源版本 Pulsar 2.7 和 2.6 分支的发布正在准备中,还需要 1-2 周的时间。在此之前,请通过使用 formatMsgNoLookups 属性来解决漏洞造成的影响。

非标准 log4j / Pulsar Functions 和进程运行时用户解决方案

如上所示,如果用户配置了 customer log4j 模板字符串或通过进程运行时(Process Runtime)使用 Pulsar Functions,即使配置了 no message lookup 解决措施,外部也可以利用 log4j 进行漏洞攻击。

总而言之,如果用户已将 log4j 模板字符串配置为包含对上下文对象($${ctx:}, %x,%mdc 等)的引用,或者通过进程运行时使用 Pulsar Functions,那么你的系统可能面临风险。我们建议用户删除自定义设置,如果必须通过进程运行时使用 Pulsar Functions 的话则升级到 Pulsar 2.8.2 或 2.9.1 版本。

Pulsar Functions 用户解决方案

用 Java 编写的 Pulsar Functions 需要重新部署来获得更新的值。我们会在未来几周内直接联系 StreamNative Cloud Managed 客户来解决任何未得到解决的 functions 上的问题。该操作类似于使用 pulsar-admin functions update命令,示例请参阅 https://pulsar.apache.org/docs/en/functions-deploying/#updating-cluster-mode-functions

StreamNative Platform 用户解决方案

如果您使用的是 StreamNative Platform,则可以相应地编辑 values 文件以部署 formatMsgNoLookups 操作。我们目前不建议更新 chart 版本,因为最新版本包含一些与此次漏洞不相关的更改。

下文为需要在值文件中添加或更改的新值。

注意:这里给到的解决方案与之前的方案——向 PULSAR_EXTRA_OPTS 中添加 -Dlog4j2.formatMsgNoLookups=true 操作是等效的,可任选其一。

bookkeeper:
  configData:
    LOG4J_FORMAT_MSG_NO_LOOKUPS: “true”
broker:
  configData:
    LOG4J_FORMAT_MSG_NO_LOOKUPS: “true”
proxy:
  configData:
    LOG4J_FORMAT_MSG_NO_LOOKUPS: “true”
streamnative_console:
  configData:
    LOG4J_FORMAT_MSG_NO_LOOKUPS: “true”
zookeeper:
  configData:
    LOG4J_FORMAT_MSG_NO_LOOKUPS: “true”

可以通过以下方式升级版本:

images:
  autorecovery:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  bookie:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  broker:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  functions:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  presto:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  proxy:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  zookeeper:
    repository: streamnative/sn-platform
    tag: 2.8.1.30
  streamnative_console:
    repository: streamnative/sn-platform-console
    tag: "1.10-rc2"

以上两种操作可以同时部署,推荐同时操作。

Apache Pulsar 开源版本解决方案

如果您使用的是开源版本 Pulsar,请参阅博客文章。此外,我们鼓励您尽可能升级到 2.8.2 或 2.9.1 版本。

此外,开源或 StreamNative Helm charts 的用户不需要等待 helm chart 中的镜像更新,可以指定类似于上面显示的 platform chart 的新版本。

周边生态相关更新

以下我们罗列了 Pulsar 生态系统中一些工具,并针对其是否受到影响进行解答。

  • Pulsar Manager - Pulsar Manager 不受 log4j 漏洞的直接影响。Pulsar Manager 是使用 spring 框架构建的,它使用 logback 进行日志记录。Logback 也受到漏洞的影响,但与 log4j 漏洞不同的是,它需要权限直接编辑 logback 配置文件,这大大降低了问题的严重性。我们将在 spring 发布修复版本后发布 Pulsar Manager 新版本。
  • Pulsar Spark/Flink Connector - Pulsar 的 Apache Flink 和 Apache Spark Connector 都不会直接受到影响。两个 Connector 都不直接包含 log4j,而是基于你所用的 Flink 或 Spark 发布版本中绑定的 log4j。升级 Flink 或 Spark 将解决这个问题。
  • Pulsar IO Connector - Pulsar IO 中的 Connector(默认情况下)本身不包含 log4j,而是依赖于 Pulsar IO 框架提供的 log4j。按照上文说明并重新部署 Connector 将解决漏洞问题。本建议适用于 Pulsar 中包含的所有 Connector 以及 StreamNative 开源并支持的Connector。自己定制开发的 Connector 可能需要独立验证。

FAQ

本次安全漏洞的严重程度?

潜在的问题可能非常严重,远程代码执行 (RCE) 漏洞会使任意代码严重暴露系统受到攻击者造成的更多破坏,从而可能获得完整的系统访问权限。

目前未发现针对 Apache Pulsar 的已知 RCE 漏洞利用。但是,我们仍建议重视此问题,因为执行代码的机制很复杂,并且存在许多潜在的可能性。暴露环境变量或其他环境数据都有可能造成攻击。强烈建议 Apache Pulsar 社区和 StreamNative 用户立即采取措施。

开源版本的发布为何需要较长时间?

发布开源 Pulsar 新版本涉及遵循社区中明确定义的流程。由于在过去一周发现了其他漏洞,社区 / Pulsar PMC(项目管理委员会)决定多次重新启动发布流程,以包含最新版本的 log4j 来解决所有未解决的问题。

本次 Log4j 安全漏洞对 StreamNative 客户及其数据是否有任何已知影响?

目前,我们未发现有任何使用此漏洞导致secret或客户数据丢失的情况。当有人试图利用这些漏洞攻击系统时,一些云厂商会自动报告安全问题,但到目前为止未发现成功的攻击行为。对于收到警告报告的客户,我们正在为其更换凭证。

© StreamNative, Inc. 2022Apache, Apache Pulsar, Apache BookKeeper, Apache Flink, and associated open source project names are trademarks of the Apache Software Foundation.TermsPrivacy