CVE-2026-41503BACnet Stack是一个用于嵌入式系统的BACnet开源协议栈C语言库。在1.4.3版本之前,该库的ReadPropertyMultiple服务属性解码器中存在越界读取漏洞。未经身份验证的远程攻击者可以通过发送带有截断属性列表的RPM请求,读取超出分配缓冲区边界的数据。该漏洞源于rpm_decode_object_property()函数调用了已弃用的decode_tag_number_and_value(),导致盲目读取指针。精心构造的BACnet/IP数据包可导致嵌入式设备崩溃,影响服务可用性。
该漏洞位于BACnet Stack源代码的src/bacnet/rpm.c文件中,具体涉及rpm_decode_object_property()函数。该函数在处理ReadPropertyMultiple (RPM) 服务请求时,调用了已弃用的decode_tag_number_and_value()函数。由于该函数不接受缓冲区长度参数,它会盲目地根据传入的指针读取数据,而未检查缓冲区边界。攻击者无需身份验证,即可通过网络向量发起攻击。利用方式是构造一个恶意的BACnet/IP数据包,其中包含一个长度仅为1字节的属性负载,且该字节包含扩展标签标记(0xF9)。当解码器处理这个特殊标记时,它会尝试读取后续数据,但由于数据包被截断,导致读取操作越界,读取了缓冲区末尾之后的1字节内存。在嵌入式设备上,这种越界访问通常会直接导致设备崩溃或服务拒绝。