CVE-2025-59946CVE-2025-59946是NanoMQ MQTT Broker中发现的一个高危安全漏洞,该漏洞影响0.24.2之前的所有版本。NanoMQ是一款面向边缘计算的轻量级消息代理平台,广泛应用于物联网(IoT)场景中MQTT协议的消息传输。该漏洞的核心问题在于订阅者信息列表(sub info list)的经典数据竞争条件(CData Race)。在多线程并发环境下,由于缺乏适当的同步保护机制,线程间对订阅信息列表的并发访问可能导致内存管理错误,最终引发堆使用后释放(Heap Use After Free)问题。当攻击者或恶意客户端通过发送特定的MQTT订阅请求触发竞态条件时,可能导致程序崩溃或潜在的代码执行风险。此漏洞的CVSS评分为7.5,属于高危级别,攻击向量为网络,复杂度为高,需要低权限认证,无需用户交互,但可造成机密性、完整性和可用性的高度影响。该漏洞已于版本0.24.2中完成修复,建议用户立即升级以消除安全风险。
NanoMQ MQTT Broker在处理MQTT订阅请求时存在数据竞争漏洞。问题根源在于订阅信息列表(sub_info_list)的数据结构在多线程并发访问时缺少适当的锁保护机制。具体来说,当多个MQTT客户端同时发送订阅(SUBSCRIBE)或取消订阅(UNSUBSCRIBE)请求时,订阅信息列表的添加、删除和遍历操作可能同时发生,导致以下问题:1) 线程A正在遍历订阅列表获取客户端信息;2) 线程B同时删除列表中的某个订阅项并释放其内存;3) 线程A继续访问已被释放的内存地址,形成堆使用后释放条件。这种竞态条件在高频订阅/退订场景下更容易被触发。攻击者可通过快速发送大量订阅和退订请求来增加竞态窗口的命中概率,最终导致NanoMQ进程崩溃或产生未定义行为。由于MQTT协议通常部署在关键基础设施中,此漏洞可能影响工业控制系统、智能家居网关等边缘设备的可用性。修复版本0.24.2通过引入线程安全的锁机制或使用无锁数据结构解决了该问题。