前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)

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

原创
作者头像
云鲨RASP
发布2023-06-12 10:21:25
5670
发布2023-06-12 10:21:25
举报
文章被收录于专栏:RASP社区RASP社区

漏洞简介

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文件

图片
图片

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

图片
图片

开启RASP后发起攻击:

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

图片
图片

堆栈信息为

图片
图片

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

图片
图片

堆栈信息为

图片
图片

漏洞分析

开始

代码语言:javascript
复制
org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(java.util.Properties)
图片
图片

跟进到

代码语言:javascript
复制
org.apache.kafka.clients.producer.KafkaProducer#KafkaProducer(java.util.Propertiesorg.apache.kafka.common.serialization.Serializer<K>,org.apache.kafka.common.serialization.Serializer<V>)
图片
图片

调用

代码语言:javascript
复制
org.apache.kafka.common.utils.Utils#propsToMap

对传入对象进行处理

图片
图片

将map型的对象传入

代码语言:javascript
复制
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>)
图片
图片

之后调用

代码语言:javascript
复制
org.apache.kafka.clients.producer.ProducerConfig#appendSerializerToConfig
图片
图片

将返回的newConfigs传入

代码语言:javascript
复制
org.apache.kafka.clients.producer.ProducerConfig#ProducerConfig(java.util.Map<java.lang.String,java.lang.Object>)
图片
图片

将配置参数传入

代码语言:javascript
复制
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.KafkaClientorg.apache.kafka.clients.producer.internals.ProducerInterceptors<K,V>org.apache.kafka.common.utils.Time)
图片
图片

赋值后调用

代码语言:javascript
复制
org.apache.kafka.clients.producer.KafkaProducer#newSender
图片
图片
图片
图片

调用到

代码语言:javascript
复制
org.apache.kafka.clients.ClientUtils#createChannelBuilder
图片
图片

赋值后调用

代码语言:javascript
复制
org.apache.kafka.common.network.ChannelBuilders#clientChannelBuilder
图片
图片

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

代码语言:javascript
复制
org.apache.kafka.common.network.ChannelBuilders#create
图片
图片
图片
图片
图片
图片

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

代码语言:javascript
复制
org.apache.kafka.common.network.SaslChannelBuilder#configure
图片
图片
图片
图片
代码语言:javascript
复制
org.apache.kafka.common.network.SaslChannelBuilder#configure

进入循环后到

代码语言:javascript
复制
org.apache.kafka.common.security.authenticator.LoginManager#acquireLoginManager
图片
图片
图片
图片
图片
图片

判断值后到

代码语言:javascript
复制
org.apache.kafka.common.security.authenticator.LoginManager#LoginManager
图片
图片
图片
图片

跟进到

代码语言:javascript
复制
org.apache.kafka.common.security.authenticator.AbstractLogin#login
图片
图片

调用

代码语言:javascript
复制
javax.security.auth.login.LoginContext#login
图片
图片

调用

代码语言:javascript
复制
javax.security.auth.login.LoginContext#invokePriv
图片
图片

调用

代码语言:javascript
复制
javax.security.auth.login.LoginContext#invoke

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

图片
图片
图片
图片

Initialize中得到userProvider

图片
图片

user.provider.url通过jndi提供

图片
图片

调用

代码语言:javascript
复制
com.sun.security.auth.module.JndiLoginModule#login
图片
图片

调用

代码语言:javascript
复制
com.sun.security.auth.module.JndiLoginModule#attemptAuthentication
图片
图片

通过

代码语言:javascript
复制
javax.naming.InitialContext#lookup(java.lang.String)

执行userProvider的值

图片
图片
图片
图片

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

Reference

  • https://github.com/luelueking/Java-CVE-Lists#cve-2023-25194
  • https://blog.snert.cn/index.php/2023/04/04/cve-2023-25194-kafka-jndi-injection-%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

关于云鲨RASP

悬镜云鲨RASP助力企业构建应用安全保护体系、搭建应用安全研运闭环,将积极防御能力注入业务应用中,实现应用安全自免疫。详情欢迎访问云鲨RASP官网https://rasp.xmirror.cn/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞简介
  • 影响版本
  • 修复方案
  • 环境搭建
  • 漏洞复现
  • 漏洞分析
相关产品与服务
应用安全开发
应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档