CVE-2026-35554Apache Kafka Java生产者客户端的缓冲区池管理中存在竞态条件漏洞。当生产批次因超过delivery.timeout.ms配置而过期,但相应的网络请求仍在传输中时,该批次的ByteBuffer会被过早地释放并归还给缓冲池。如果随后的生产批次(可能发往不同的主题)在原始网络请求完成之前重用了这块被释放的缓冲区,缓冲区内容可能会发生损坏。这导致消息被静默投递到非预期的主题,从而破坏数据的机密性和完整性,且生产者端不会收到任何错误报告。
该漏洞源于Apache Kafka Java生产者客户端在处理缓冲区生命周期时的竞态条件。具体原理如下:生产者发送数据时使用缓冲池中的ByteBuffer。如果网络请求仍在传输中,但该批次因达到delivery.timeout.ms而超时,系统会触发回调并将该ByteBuffer标记为可用,立即归还给缓冲池。此时,如果新的生产请求(可能针对完全不同的Topic)申请内存并复用了这块刚刚释放的Buffer,而旧的网络IO操作尚未完成,就会发生内存冲突。网络线程继续写入旧数据,新线程准备新数据,导致Buffer内容混乱。最终,旧的网络请求实际上发送了被污染的数据,导致本应发往Topic A的消息被发到了Topic B,造成数据泄露和完整性破坏,且客户端无法感知异常。