最新版:Apache Pulsar 与 StreamNative 产品针对 Log4j 漏洞解决方案

486 阅读9分钟

作者:Matteo Merli,StreamNative CTO,Apache Pulsar PMC 主席;Addison Higham,StreamNative 主管工程师,Apache Pulsar Committer。


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

上周末,Apache 开源项目 Log4j 2.16.0 被曝出新的漏洞,Log4j 紧急发布 2.17.0 版本。本文为大家提供最新版 Apache Pulsar 有关 Log4Shell 关键漏洞(即 log4j)的更新。以下列举了开源版本 Apache Pulsar 和 StreamNative 产品中漏洞的状态,以及需要解决安全漏洞所需采取的措施。 如果您有任何问题与疑问,请在 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描述Pulsar 受到的影响解决方案
CVE-2021-44228[1]此漏洞允许外部对易受攻击的系统版本中执行远程代码执行(RCE) 攻击。该漏洞也可能导致数据/secret 泄露。Log4j 2.15.0 版本修复了此问题。默认情况下,2.9.1 或 2.8.2 之前的 Pulsar 版本容易受到攻击。然而,目前(在使用 Docker 镜像或最新的 JRE 的情况下)未发现任何已知的 RCE 威胁,但数据或Secret 可能通过环境变量泄漏。• 建议更新至 Pulsar 2.9.1 或 2.8.2 版本• 并且添加 formatMsgNoLookups 属性或 LOG4J_FORMAT_MSG_NO_LOOKUPS 环境变量
CVE-2021-45046[2]如果使用某些 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[3]当用户使用某些 log4j 格式配置时该漏洞会导致系统存在被 DoS 攻击的风险。在 log4j 2.16.0 中该漏洞依然存在。Log4j 2.17.0 版本修复了这个问题。默认情况下,Pulsar 不会受到攻击,除非用户使用 “进程” 运行时配置了 Pulsar Functions 或者配置了非标准的 log4j 格式。请参阅非标准 log4j 配置的其他详细信息。• 更新至 Pulsar 2.9.1 或 2.8.2 版本• 或者禁用 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命令,示例请参阅 pulsar.apache.org/docs/en/fun…

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 可能需要独立验证。

其他有关 log4j 安全漏洞的 FAQ

  1. 本次安全漏洞的严重程度。
    潜在的问题可能非常严重,远程代码执行 (RCE) 漏洞会使任意代码严重暴露系统受到攻击者造成的更多破坏,从而可能获得完整的系统访问权限。目前未发现针对 Apache Pulsar 的已知 RCE 漏洞利用。但是,我们仍建议重视此问题,因为执行代码的机制很复杂,并且存在许多潜在的可能性。暴露环境变量或其他环境数据都有可能造成攻击。Apache Pulsar 社区和 StreamNative 强烈建议用户立即采取措施。
  2. 开源版本的发布为何需要较长时间?
    发布开源 Pulsar 新版本涉及遵循社区中明确定义的流程。由于在过去一周发现了其他漏洞,社区 / Pulsar PMC(项目管理委员会)决定多次重新启动发布流程,以包含最新版本的 log4j 来解决所有未解决的问题。
  3. 本次 Log4j 安全漏洞对 StreamNative 客户及其数据是否有任何已知影响?
    目前,我们未发现有任何使用此漏洞导致secret或客户数据丢失的情况。当有人试图利用这些漏洞攻击系统时,一些云厂商会自动报告安全问题,但到目前为止未发现成功的攻击行为。对于收到警告报告的客户,我们正在为其更换凭证。

相关阅读

引用链接

[1] CVE-2021-44228: nvd.nist.gov/vuln/detail…
[2] CVE-2021-45046: nvd.nist.gov/vuln/detail…
[3] CVE-2021-45105: nvd.nist.gov/vuln/detail…