kafka任意文件读取漏洞分析 CVE-2025-27817

Posted on 2025-06-12  92 Views


最近看到了这个
https://mp.weixin.qq.com/s/HEE7mK0--MmRpMZRDBRrfw

近日,奇安信CERT监测到Kafka官方修复多个安全漏洞:Apache Kafka客户端任意文件读取漏洞(CVE-2025-27817)是由于在 SASL/OAUTHBEARER 和 SASL JAAS 配置中未对 URL 和登录模块进行严格限制,从而造成的客户端的敏感数据和内网信息泄露

然后两张高糊图片

image

首先有几个重点

  1. 出漏洞的是kafka connect
  2. OAUTH的洞,没过滤url导致
  3. 漏洞通过HTTP触发

然后就是要搞清楚,kafka connect是干嘛的
Kafka Connect简介-CSDN博客

image

有点像logstash?

下载kafka源代码,3.9.0版本
apache/kafka: Mirror of Apache Kafka

漏洞入口位于org.apache.kafka.connect.runtime.rest.resources.ConnectorsResource,别问我怎么知道的,问就是从官方的测试代码里面发现的

image
image

上面漏洞预警说,是oauth没有过滤url导致的洞,那应该是kafka向认证服务发起HTTP请求的时候触发漏洞的

顺着createConnector方法深入下去,发现java真是多姿多彩,很难发现究竟是什么时候发起的oauth请求,而且没在官方test代码里面没发现测试oauth的代码,也可能官方测了,我没发现

看看kafka项目的整体结构,发现connect包下面似乎没有oauth相关的东西

image

最后发现在clients包里发现oauth了

image

漏洞预警里面说是OAUTHBEARER有洞,名字对上了。在OAuthBearerLoginModule发现login方法,估计就是这里有漏洞。看看OAuthBearerLoginModule类的注释:

image

大概意思就是说,在连接kafka broker的时候会调用oauth

结合官方的测试代码和qax的漏洞预警,估计就是通过http配置connector的时候,把oauth服务的地址设置成本地文件,最后不知道怎么就读取了。毕竟oauth是用来oauth的,如果你让他访问本地文件,那它肯定会报错

接下来让stacktrace告诉我们答案

docker pull apache/kafka:3.9.0
docker run --network host -d --name broker apache/kafka
docker exec --workdir /opt/kafka/bin/ -it broker sh
# broker容器内部
# 开topic
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic
cd ..
# 启动kafka connect服务之前,修改配置文件,加载插件
vi config/connect-standalone.properties
# connect-standalone.properties内部
plugin.path=/opt/kafka/libs
# 保存退出,启动kafka connect
bin/connect-standalone.sh config/connect-standalone.properties

根据stacktrace调整payload,终于打通了

攻击流程就是先把构造好的创建connector的请求发过去,然后再查看connector状态,因为把oauth地址配置成本地文件了,请求的响应格式不对会报错,错误信息里面就有文件内容

考虑到带头大哥的公众号里都没披露漏洞细节,那我也不披露吧,就贴两个高糊的图在这里

image
image

你好