
CVE-2026-36522: неаутентифицированная инъекция NaN через MAVLink PARAM_SET в ArduPilot ArduPlane (CWE-1287, DoS/целостность)
Неаутентифицированная инъекция NaN через MAVLink PARAM_SET в ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Некорректная проверка указанного типа входных данных) |
| 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() принимает значение IEEE 754 с плавающей запятой из
неаутентифицированного сообщения MAVLink PARAM_SET без проверки на NaN или
бесконечность. Неверное значение попадает в сравнение чисел с плавающей запятой
(is_equal<float,float>() в AP_Math.cpp) без какой-либо проверки типа или значения.
Это не уязвимость, ведущая к выполнению кода. Воздействие заключается в отказе в обслуживании и нарушении целостности.
Пробел в проверке находится в общем обработчике параметров, поэтому затрагиваются все параметры с плавающим типом.
Одно неаутентифицированное сообщение PARAM_SET, содержащее тихий NaN (0x7FC00000), нацеленное на ARSPD_FBW_MIN:
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
Снятый стек-трейс SITL (stacktrace.txt), показывающий, как внешние входные данные достигают незащищённого сравнения:
#6 is_equal<float, float> (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 | Запрос CVE отправлен в MITRE |
| 2026-02-26 | Поставщик уведомлён (ArduPilot) |
| 2026-06-15 | Назначен CVE-2026-36522; опубликованы PoC и стек-трейс |
Sebastien Arseneault — Deep Woods Security