1.漏洞描述
Apache Kafka 是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型应用程序。
在版本3.3.2及以前,Apache Kafka clients中存在一处JNDI注入漏洞。如果攻击者在连接的时候可以控制属性sasl.jaas.config的值为com.sun.security.auth.module.JndiLoginModule,则可以发起JNDI连接,进而导致JNDI注入漏洞,执行任意命令。
2.影响版本
0.19.0 <= Apache Druid <= 25.0.0
3.影响范围
4.漏洞分析
org.apache.kafka.clients.consumer.KafkaConsumer
类的第 177 行 ClientUtils.createChannelBuilder()
判断 SASL 模式是否开启,开启了才会往下跟进到 create()
方法
跟进 create()
方法,做完客户端的判断和安全协议的判断之后,调用了 loadClientContext()
方法,跟进,发现其中还是加载了一些配置。
跟进 ((ChannelBuilder)channelBuilder).configure(configs)
方法,最后跟到 org.apache.kafka.common.security.authenticator.LoginManager
的构造函数
login()
方法,此处 new LoginContext()
,然后调用 login()
方法
调用 JndiLoginModule
的 initialize()
方法
初始化完成之后,调用 JndiLoginModule
的 login()
方法,最后到 JndiLoginModule
的 attemptAuthentication()
方法,最后 Jndi 注入。
Poc:
5.修复建议
目前官方已有可更新版本,建议受影响用户升级至:Apache Kafka 3.4.0及以上版本。
厂商官网:https://druid.apache.org/