CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现

admin 2025年6月23日22:35:25评论50 views字数 3062阅读10分12秒阅读模式

漏洞描述

近期 Apache修复了Apache Kafka Connect组件中的一个任意文件读取漏洞CVE-2025-27817。该漏洞源于Kafka对配置参数缺少检查,导致恶意攻击者可构造特殊URL读取服务器上的任意文件或者实现SSRF攻击,影响版本为:3.1.0~3.9.0。此外,该漏洞还影响Apache Druid等集成了Connect 组件的应用系统。

研究环境

为了快速分析,可以选择下载编译好的程序:

./zookeeper-server-start.sh ../config/zookeeper.properties./kafka-server-start.sh ../config/server.properties./connect-distributed.sh ../config/connect-distributed.properties

connect-distributed.sh 调用 kafka-run-class.sh 来启动进程,查看 kafka-run-class.sh 发现当环境变量 KAFKA_DEBUG 非空时将添加远程调试配置:

CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现

可以在 connect-distributed.sh 中加入环境变量定义以启动远程调试:

...export KAFKA_DEBUG=trueexec $(dirname $0)/kafka-run-class.sh $EXTRA_ARGS org.apache.kafka.connect.cli.ConnectDistributed "$@"

漏洞分析

从公开披露的信息看,CVE-2025-27817与历史上的CVE-2023-25194相似,触发接口都位于ConnectorsResource#createConnector,分析时可以参考CVE-2023-25194的构造过程。该接口传入的参数类型为CreateConnectorRequest,其中包含一个名为config的键值对。调试确认此时类中的herder类型为DistributedHerder
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
进入putConnectorConfig函数,经过传递将调用validateConnectorConfig验证传入的config参数。该函数尝试从参数中读取keyconnector.classvalue值,然后通过getConnector来实例化Connector对象。Kafka中抽象类Connector共有7个子类:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
FileStreamSinkConnectorFileStreamSourceConnectorMirrorCheckpointConnectorMirrorHeartbeatConnectorMirrorSourceConnectorSinkConnectorSourceConnector
MirrorHeartbeatConnector为例,当请求参数中connector.class取值为MirrorHeartbeatConnector时,会利用类中的start函数创建一个Task任务,并通过execute启动任务子线程,而此时config的值仍来自于用户请求 :
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
子线程调用DistributedHerder类的startTask函数执行任务,在后续处理中,会利用Worker#baseProducerConfigsconfig中以producer.开头的值赋值给新生成的producerProps,并且新命名的key去掉了producer.头:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
public Map<String, Object> originalsWithPrefix(String prefix, boolean strip) {      Map<String, Object> result = new RecordingMap(prefix, false);      result.putAll(Utils.entriesWithPrefix(this.originals, prefix, strip));      return result;  }
继续往下执行会进入LoginManager#LoginManager,并通过configure函数进行配置,调用栈如下:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现

configure 函数将根据 configs 的值来生成 accessTokenRetriever 和 accessTokenValidator :

public void configure(Map<String, ?> configs, String saslMechanism, List<AppConfigurationEntry> jaasConfigEntries) {     this.moduleOptions = JaasOptionsUtils.getOptions(saslMechanism, jaasConfigEntries);     AccessTokenRetriever accessTokenRetriever = AccessTokenRetrieverFactory.create(configs, saslMechanism, this.moduleOptions);     AccessTokenValidator accessTokenValidator = AccessTokenValidatorFactory.create(configs, saslMechanism);     this.init(accessTokenRetriever, accessTokenValidator);  }
查看AccessTokenRetrieverFactory#create函数:尝试从配置中读取sasl.oauthbearer.token.endpoint.url并赋值给URL,当协议为file时,会实例化一个FileTokenRetriever对象:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
最终init函数将触发文件读取操作,获取sasl.oauthbearer.token.endpoint.url指向的文件内容:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
用户可以通过控制请求参数config来实现任意文件读取。上述请求是创建connector的过程,想要查看读取的文件内容可以通过另一个接口/status实现:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
漏洞复现如下:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现

修复方式

AccessTokenRetrieverFactoryVerificationKeyResolverFactory中对URL进行了限定:
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现
// visible for testing// make sure the url is in the "org.apache.kafka.sasl.oauthbearer.allowed.urls" system propertyvoid throwIfURLIsNotAllowed(String configName, String configValue) {    throwIfResourceIsNotAllowed(        "URL",        configName,        configValue,        ALLOWED_SASL_OAUTHBEARER_URLS_CONFIG,        ALLOWED_SASL_OAUTHBEARER_URLS_DEFAULT    );}
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。

原文始发于微信公众号(自在安全):CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月23日22:35:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2025-27817 Apache Kafka Connect 任意文件读取漏洞分析与复现https://cn-sec.com/archives/4193400.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息