deepwoodssec/CVE-2026-36522

GitHub: deepwoodssec/CVE-2026-36522

ArduPilot ArduPlane 中通过未授权 MAVLink PARAM_SET 消息注入 NaN 值导致拒绝服务和飞行参数损坏的漏洞 PoC 与研究报告。

Stars: 0 | Forks: 0

# CVE-2026-36522 **ArduPilot ArduPlane 中通过 MAVLink `PARAM_SET` 进行的未授权 NaN 注入** | | | |---|---| | **CVE** | CVE-2026-36522 | | **CWE** | CWE-1287 (Improper Validation of Specified Type of Input) | | **CVSS 3.1** | 9.1 严重 — `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H` | | **受影响版本** | ArduPilot ArduPlane 4.0.1(已确认) | | **组件** | `GCS_MAVLINK::handle_param_set()` — `libraries/GCS_MAVLink/GCS_Param.cpp` | | **攻击向量** | 远程、未授权 MAVLink | | **影响** | 拒绝服务 (SITL) / 隐蔽的飞行参数损坏(硬件) | | **报告者** | Sebastien Arseneault, Deep Woods Security | ## 摘要 `handle_param_set()` 会接收来自未授权 MAVLink `PARAM_SET` 消息的 IEEE 754 浮点数值,且未验证其是否为 NaN 或无穷大。该格式错误的值到达浮点比较(`AP_Math.cpp` 中的 `is_equal()`)时,没有任何类型或值检查。 这**不是**代码执行漏洞。其影响是拒绝服务和完整性损坏。 ## 影响 - **启用了 FP 异常的 SITL / 构建版本:** NaN 会触发浮点异常 (SIGFPE),导致自动驾驶进程中止运行 —— 即拒绝服务。 - **禁用了 FP 异常的生产环境硬件(STM32/Pixhawk):** 格式错误的值会被隐蔽地存储到关键飞行参数中,系统不会崩溃,操作员也看不到任何警告。这是更危险的情况:损坏的飞行参数会传播到控制数学运算中,而操作员毫无察觉。 验证缺口存在于通用参数处理器中,因此所有 float 类型的参数都会受到影响。 ## 概念验证 (PoC) 单个未授权的 `PARAM_SET` 消息携带一个 quiet NaN (`0x7FC00000`) 并针对 `ARSPD_FBW_MIN`: ``` python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760 ``` 参见 [`poc/CVE-2026-36522.py`](poc/CVE-2026-36522.py)。 ## 证据 捕获的 SITL 堆栈跟踪 ([`stacktrace.txt`](stacktrace.txt)) 显示外部输入到达了未加保护的比较操作: ``` #6 is_equal (v_1=nan(0x400000), v_2=0) at AP_Math.cpp:35 #7 GCS_MAVLINK::handle_param_set ... at GCS_Param.cpp:299 packet = {param_value = nan(0x400000), param_id = "ARSPD_FBW_MIN", param_type = 9} ``` 调用链(`update_receive` -> `packetReceived` -> `handle_common_message` -> `handle_param_set`)证实了该路径可从未授权的网络输入到达。 ## 修复建议 在使用前验证传入的值: ``` if (isnan(packet.param_value) || isinf(packet.param_value)) { // reject: value out of range return; } ``` ## 披露时间表 | 日期 | 事件 | |---|---| | 2026-02-26 | 向 MITRE 提交了 CVE 请求 | | 2026-02-26 | 通知了供应商 (ArduPilot) | | 2026-06-15 | 分配了 CVE-2026-36522;发布了 PoC 和堆栈跟踪 | ## 致谢 Sebastien Arseneault — Deep Woods Security
标签:ArduPilot, MAVLink, 拒绝服务, 无人机安全, 漏洞验证脚本, 逆向工具, 配置错误