Apache Kafka 漏洞 【CVE-2023-25194】说明及解决建议

目录

漏洞发布时间:

影响版本:

漏洞说明:

漏洞建议:

官方描述:

升级 Apache Kafka 各版本重大更新参考


漏洞发布时间:

2023-02-07

影响版本:

Apache Kafka 2.3~3.4之间所有版本

漏洞说明:

在Apache Kafka Connect中发现了一个可能的安全漏洞。这需要访问Kafka Connect worker,并能够使用任意Kafka客户端SASL JAAS配置和基于SASL的安全协议在其上创建/修改连接器,这在Apache Kafka 2.3.0以来的Kafka Connect集群上已经成为可能。通过 Kafka Connect REST API 配置连接器时,经过身份验证的操作员可以将连接器的任何 Kafka 客户端的 sasl.jaas.config 属性设置为“com.sun.security.auth.module.JndiLoginModule”,它可以是 通过“producer.override.sasl.jaas.config”、“consumer.override.sasl.jaas.config”或“admin.override.sasl.jaas.config”属性完成。这将允许服务器连接到攻击者的LDAP服务器并反序列化LDAP响应,攻击者可以使用该响应在Kafka connect服务器上执行java反序列化gadget链。当类路径中存在指令片段时,攻击者可能会导致不受限制的不可信数据反序列化(或RCE漏洞)。从Apache Kafka 3.0.0开始,用户可以在connector配置中指定这些属性,以便使用开箱即用的配置运行Kafka Connect集群。在Apache Kafka 3.0.0之前,用户不能指定这些属性,除非Kafka Connect集群已经重新配置了连接器客户端覆盖策略,允许用户指定这些属性。

漏洞建议:

将您的Apache Kafka升级至 3.4.0版本及以上,从Apache Kafka 3.4.0开始,我们添加了一个系统属性(“-Dorg.apache.kafka.disallowed.login.modules”)来禁用SASL JAAS配置中有问题的登录模块使用。默认情况下“com.sun.security.auth.module.JndiLoginModule”在 Apache Kafka 3.4.0 中被禁用。我们建议 Kafka Connect 用户验证连接器配置并只允许受信任的 JNDI 配置。还要检查易受攻击版本的连接器依赖项,并升级其连接器、升级特定依赖项或删除连接器作为补救选项。 最后,除了利用“org.apache.kafka.disallowed.login.modules”系统属性外,Kafka Connect用户还可以实现自己的连接器客户端配置覆盖策略,该策略可以用来控制哪些Kafka客户端属性可以直接在连接器配置中覆盖,哪些不能。

官方描述:

A possible security vulnerability has been identified in Apache Kafka Connect. This requires access to a Kafka Connect worker, and the ability to create/modify connectors on it with an arbitrary Kafka client SASL JAAS config and a SASL-based security protocol, which has been possible on Kafka Connect clusters since Apache Kafka 2.3.0. When configuring the connector via the Kafka Connect REST API, an authenticated operator can set the sasl.jaas.config property for any of the connector’s Kafka clients to “com.sun.security.auth.module.JndiLoginModule”, which can be done via the producer.override.sasl.jaas.configconsumer.override.sasl.jaas.config, or admin.override.sasl.jaas.config properties. This will allow the server to connect to the attacker’s LDAP server and deserialize the LDAP response, which the attacker can use to execute java deserialization gadget chains on the Kafka connect server. Attacker can cause unrestricted deserialization of untrusted data (or) RCE vulnerability when there are gadgets in the classpath. Since Apache Kafka 3.0.0, users are allowed to specify these properties in connector configurations for Kafka Connect clusters running with out-of-the-box configurations. Before Apache Kafka 3.0.0, users may not specify these properties unless the Kafka Connect cluster has been reconfigured with a connector client override policy that permits them. Since Apache Kafka 3.4.0, we have added a system property (“-Dorg.apache.kafka.disallowed.login.modules”) to disable the problematic login modules usage in SASL JAAS configuration. Also by default “com.sun.security.auth.module.JndiLoginModule” is disabled in Apache Kafka 3.4.0. We advise the Kafka Connect users to validate connector configurations and only allow trusted JNDI configurations. Also examine connector dependencies for vulnerable versions and either upgrade their connectors, upgrading that specific dependency, or removing the connectors as options for remediation. Finally, in addition to leveraging the “org.apache.kafka.disallowed.login.modules” system property, Kafka Connect users can also implement their own connector client config override policy, which can be used to control which Kafka client properties can be overridden directly in a connector config and which cannot.

官方描述译文:
在Apache Kafka Connect中发现了一个可能的安全漏洞。这需要访问Kafka Connect worker,并能够使用任意Kafka客户端SASL JAAS配置和基于SASL的安全协议在其上创建/修改连接器,这在Apache Kafka 2.3.0以来的Kafka Connect集群上已经成为可能。通过 Kafka Connect REST API 配置连接器时,经过身份验证的操作员可以将连接器的任何 Kafka 客户端的 sasl.jaas.config 属性设置为“com.sun.security.auth.module.JndiLoginModule”,它可以是 通过“producer.override.sasl.jaas.config”、“consumer.override.sasl.jaas.config”或“admin.override.sasl.jaas.config”属性完成。这将允许服务器连接到攻击者的LDAP服务器并反序列化LDAP响应,攻击者可以使用该响应在Kafka connect服务器上执行java反序列化gadget链。当类路径中存在指令片段时,攻击者可能会导致不受限制的不可信数据反序列化(或RCE漏洞)。
​ 从Apache Kafka 3.0.0开始,用户可以在connector配置中指定这些属性,以便使用开箱即用的配置运行Kafka Connect集群。在Apache Kafka 3.0.0之前,用户不能指定这些属性,除非Kafka Connect集群已经重新配置了连接器客户端覆盖策略,允许用户指定这些属性。从Apache Kafka 3.4.0开始,我们添加了一个系统属性(“-Dorg.apache.kafka.disallowed.login.modules”)来禁用SASL JAAS配置中有问题的登录模块使用。默认情况下“com.sun.security.auth.module.JndiLoginModule”在 Apache Kafka 3.4.0 中被禁用。我们建议 Kafka Connect 用户验证连接器配置并只允许受信任的 JNDI 配置。还要检查易受攻击版本的连接器依赖项,并升级其连接器、升级特定依赖项或删除连接器作为补救选项。 最后,除了利用“org.apache.kafka.disallowed.login.modules”系统属性外,Kafka Connect用户还可以实现自己的连接器客户端配置覆盖策略,该策略可以用来控制哪些Kafka客户端属性可以直接在连接器配置中覆盖,哪些不能。

升级 Apache Kafka 各版本重大更新参考

版本

重大更新

可能造成升级冲突的改动

全部更新内容

2.3

  • Kafka Connect REST API 有多项改进。
  • Kafka Connect 现在支持增量协作再平衡。
  • Kafka Streams 现在支持内存中会话存储和窗口存储。
  • AdminClient 现在允许用户确定他们有权对主题执行哪些操作。
  • 有一个新的代理开始时间指标。
  • JMXTool 现在可以连接到安全的 RMI 端口。
  • 添加了一个增量的 AlterConfigs API。旧的 AlterConfigs API 已被弃用。
  • 我们现在跟踪低于其最小 ISR 计数的分区。
  • 消费者现在可以选择退出自动主题创建,即使它在代理上启用也是如此。
  • Kafka 组件现在可以使用外部配置存储 (KIP-421)。
  • 当遇到错误时,我们已经实施了改进的副本获取器行为。

https://archive.apache.org/dist/kafka/2.3.0/RELEASE_NOTES.html

2.4

  • 允许消费者从最近的副本中获取。
  • 支持对消费者再平衡协议的增量合作再平衡。
  • MirrorMaker 2.0 (MM2),一个新的多集群、跨数据中心的复制引擎。
  • 新的 Java 授权接口。
  • 支持 KTable 中的非键连接。
  • 用于副本重新分配的管理 API。

https://archive.apache.org/dist/kafka/2.4.0/RELEASE_NOTES.html

2.5

  • TLS 1.3 支持(1.2 现在是默认值)
  • Kafka Streams 合作小组
  • Kafka Consumer 的增量再平衡
  • 新指标以获得更好的运营洞察力
  • 将 Zookeeper 升级到 3.5.7
  • 弃用对 Scala 2.11 的支持

https://archive.apache.org/dist/kafka/2.5.0/RELEASE_NOTES.html

2.6

  • TLSv1.3 已默认为 Java 11 或更新版本启用
  • 显着的性能改进,尤其是当代理有大量分区时
  • 平滑扩展 Kafka Streams 应用程序
  • Kafka Streams 支持更改时发出
  • 新指标以获得更好的运营洞察力
  • Kafka Connect 可以在配置时自动为源连接器创建主题
  • 改进了 Kafka Connect 中接收器连接器的错误报告选项
  • Kafka Connect 中的新过滤器和条件 SMT
  • `client.dns.lookup` 配置的默认值现在是 `use_all_dns_ips`
  • 将 Zookeeper 升级到 3.5.8

将 Zookeeper 升级到 3.5.8

https://archive.apache.org/dist/kafka/2.6.0/RELEASE_NOTES.html

2.7

  • 可配置的 TCP 连接超时并改进初始元数据获取
  • 执行代理范围和每个侦听器的连接创建率(KIP-612,第 1 部分)
  • 限制创建主题、创建分区和删除主题操作
  • 将 TRACE 级别的端到端延迟指标添加到 Streams
  • 添加 Broker 端 SCRAM Config API
  • 支持 SSL 证书和私钥的 PEM 格式
  • 将 RocksDB 内存消耗添加到 RocksDB 指标
  • 添加对聚合的滑动窗口支持

https://archive.apache.org/dist/kafka/2.7.0/RELEASE_NOTES.html

2.8

  • 提前访问用自我管理的仲裁替换 ZooKeeper
  • 添加描述集群 API
  • 在 SASL_SSL 侦听器上支持相互 TLS 身份验证
  • JSON 请求/响应调试日志
  • 限制代理连接创建率
  • 主题标识符
  • 在 Connect REST API 中公开任务配置
  • 更新 Streams FSM 以阐明 ERROR 状态的含义
  • 扩展 StreamJoined 以允许更多商店配置
  • 更方便的 TopologyTestDriver 构造函数
  • 引入 Kafka-Streams 特定的未捕获异常处理程序
  • 用于启动和关闭 Streams 线程的 API
  • 改进 TimeWindowedDeserializer 和 TimeWindowedSerde 以处理窗口大小
  • 改进 Kafka Streams 中的超时和重试

移除对Zookeeper的依赖,使用KRaft

https://archive.apache.org/dist/kafka/2.8.0/RELEASE_NOTES.html

3.0

  • 弃用对 Java 8 和 Scala 2.12 的支持
  • Kafka Raft 支持元数据主题的快照和自我管理仲裁的其他改进
  • 默认情况下为 Kafka 生产者启用更强的交付保证
  • 弃用消息格式 v0 和 v1
  • OffsetFetch 和 FindCoordinator 请求中的优化
  • 更灵活的 Mirror Maker 2 配置和 Mirror Maker 1 的弃用
  • 能够在 Kafka Connect 中的单个调用中重新启动连接器的任务
  • 现在默认启用连接器日志上下文和连接器客户端覆盖
  • Kafka Streams 中时间戳同步的增强语义
  • 改进了 Stream 的 TaskId 的公共 API
  • Kafka 中的默认 serde 变为空

弃用Java8以及Scala2.12(4.0版本将完全放弃)

https://archive.apache.org/dist/kafka/3.0.0/RELEASE_NOTES.html

3.1

  • Apache Kafka 支持 Java 17
  • FetchRequest 支持主题 ID (KIP-516)
  • 扩展 SASL/OAUTHBEARER 以支持 OIDC (KIP-768)
  • 添加经纪人计数指标 (KIP-748)
  • 区分以毫秒和纳秒为单位测量的一致度量延迟 (KIP-773)
  • 急切的重新平衡协议已被弃用 (KAFKA-13439)
  • 将 TaskId 字段添加到 StreamsException (KIP-783)
  • 外键连接中的自定义分区器 (KIP-775)
  • 使用 SessionStore/WindowStore 的开放端点获取/查找会话查询 (KIP-766)
  • 具有开放端点的范围查询 (KIP-763)
  • 将总阻塞时间指标添加到 Streams (KIP-761)
  • 添加额外配置以控制 MirrorMaker2 内部主题命名约定 (KIP-690)

https://downloads.apache.org/kafka/3.1.0/RELEASE_NOTES.html

3.2

  • log4j 1.x 替换为 reload4j
  • KRaft 标准授权器 (KIP-801)
  • 向分区负责人发送提示以恢复分区(KIP-704)
  • DescribeLogDirsResponse 中的顶级错误代码字段 (KIP-784)
  • kafka-console-producer 写入标头和空值(KIP-798 和 KIP-810)
  • JoinGroupRequest 和 LeaveGroupRequest 附有原因 (KIP-800)
  • 静态成员协议允许领导者跳过分配 (KIP-814)
  • Kafka Streams 中的机架感知备用任务分配(KIP-708)
  • 交互式查询 v2(KIP-796、KIP-805 和 KIP-806)
  • 连接 API 列出所有连接器插件并检索它们的配置 (KIP-769)
  • TimestampConverter SMT 支持不同的 unix 时间精度 (KIP-808)
  • 连接源任务处理生产者异常 (KIP-779)

log4j 1.x 替换为 reload4j

https://archive.apache.org/dist/kafka/3.2.0/RELEASE_NOTES.html

3.3.1

  • KIP-833:将 KRaft 标记为生产就绪
  • KIP-778:KRaft 到 KRaft 的升级
  • KIP-835:监控 KRaft Controller Quorum 健康状况
  • KIP-794:严格统一的粘性分区器
  • KIP-834:暂停/恢复 KafkaStreams 拓扑
  • KIP-618:对源连接器的 Exactly-Once 支持

https://archive.apache.org/dist/kafka/3.3.1/RELEASE_NOTES.html

3.4

  • KIP-866:ZooKeeper 到 KRaft 的迁移(抢先体验)
  • KIP-792:在消费者协议中添加“生成”字段
  • KIP-830:允许禁用 JMX Reporter
  • KIP-840提供了一个新的配置文件选项,用于通过引入新参数--reader-config和--formatter-config.
  • KIP-854:生产者 ID 过期的单独配置
  • KIP-876:基于时间的集群元数据快照
  • KIP-881:Kafka 消费者的机架感知分区分配
  • KIP-770:用 cache.max.bytes 替换 cache.max.bytes.buffering
  • KIP-837:允许多播结果记录
  • KIP-865:在 kafka-streams-application-reset 中支持“--bootstrap-server”
  • KIP-787:用于管理 Kafka 资源的 MirrorMaker2 自定义 Kafka Admin 界面

新增ZooKeeper 到 KRaft 的迁移功能(Early Access)

https://downloads.apache.org/kafka/3.4.0/RELEASE_NOTES.html

参考文献:

[1]http://vulhub.org.cn/vuln/VHN-454125​​​​​​

[2]Apache Kafka

你可能感兴趣的:(大数据平台-日常运维,kafka,apache,java)