草庐IT

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

EdwardsWang丶 2023-12-30 原文

目录

漏洞发布时间:

影响版本:

漏洞说明:

漏洞建议:

官方描述:

升级 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

有关Apache Kafka 漏洞 【CVE-2023-25194】说明及解决建议的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  3. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  4. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  7. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  8. ruby - 如何更快地解决 project euler #21? - 2

    原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,

  9. ruby-on-rails - 我需要从 HTML 转到 markdown,有什么建议吗? - 2

    我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby​​脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162

  10. ruby-on-rails - ActiveRecord:除非另有说明,否则在保存之前使所有文本字段都调用 strip - 2

    多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor

随机推荐