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, 拒绝服务, 无人机安全, 漏洞验证脚本, 逆向工具, 配置错误