CVE-2025-10543Eclipse Paho Go MQTT v3.1库(paho.mqtt.golang)在处理UTF-8编码字符串时存在严重的整数溢出漏洞。当传入库的字符串长度超过65535字节时,由于长度字段从int64/int32类型转换为int16时未进行溢出检查,可能导致数据包内容损坏。具体表现为:写入的int16长度字段值不正确,但后续数据仍按原始长度写入,造成数据包长度字段与实际数据长度不匹配。这种情况下,超出65535字节的数据可能泄漏到其他字段,例如PUBLISH数据包中的主题内容可能泄漏到消息体中,MQTT CONNECT数据包中的客户端ID可能泄漏到用户名或密码字段。该漏洞影响所有使用该库进行MQTT通信的应用程序,可能导致敏感信息泄露或通信协议混乱。攻击者可通过构造超长主题或消息触发此漏洞,在特定场景下可能造成数据泄露风险。
漏洞根源在于paho.mqtt.golang库在编码MQTT数据包时,对长度字段的类型转换缺乏安全检查。MQTT协议规定多个字段使用2字节无符号整数(uint16,最大值65535)表示长度。当Go语言的int64/int32类型变量(值可能远超65535)被强制转换为int16时,高位数据会被截断。例如,长度值131072(0x20000)转换为int16后变为0,导致长度字段被错误设置为0或极小值。编码过程中,程序先写入这个错误的int16长度值,然后写入完整的原始数据。由于长度字段与实际数据长度不一致,接收端解析时会读取错误长度的数据,后续数据被误认为是下一个字段内容。攻击者利用此漏洞需要构造包含超长UTF-8字符串的MQTT数据包(如超长主题、客户端ID、用户名等),触发整数溢出后,数据包中敏感字段内容会泄漏到其他字段位置,可能导致会话劫持或信息泄露。