CVE-2026-40279BACnet Stack是一个用于嵌入式系统的BACnet开源协议栈C库。在1.4.3版本之前,src/bacnet/bacint.c文件中的decode_signed32()函数在从四个APDU字节重建32位有符号整数时存在缺陷。当输入字节包含高位设置(bit 7 set)时,有符号左移操作会导致int32_t溢出,触发未定义行为。该漏洞可能被利用于导致拒绝服务,已在1.4.3版本中修复。
漏洞源于BACnet Stack中decode_signed32()函数的实现方式。该函数试图通过有符号左移操作将四个字节组合成一个32位有符号整数。根据C语言标准,对有符号整数进行左移并导致符号位改变或数值溢出属于未定义行为。具体场景中,当解析包含特定属性值(即四个字节中任一字节的第7位被设置,值≥0x80)的BACnet输入时,左移操作会导致int32_t溢出。攻击者可以通过网络发送特制的BACnet协议包,诱导目标设备解析这些恶意数据,从而触发未定义行为,导致设备进程崩溃或拒绝服务。