
CVE-2026-36522: unauthenticated NaN injection via MAVLink PARAM_SET in ArduPilot ArduPlane (CWE-1287, DoS/integrity)
ArduPilot ArduPlane에서 MAVLink PARAM_SET을 통한 인증되지 않은 NaN 주입
| 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()은 인증되지 않은 MAVLink PARAM_SET 메시지로부터 IEEE 754 부동소수점 값을 수신할 때 NaN 또는 무한대 유효성 검사를 수행하지 않습니다. 변형된 값은 유형 또는 값 검사 없이 부동소수점 비교(AP_Math.cpp의 is_equal<float,float>())에 도달합니다.
이는 코드 실행 취약점이 아닙니다. 영향은 서비스 거부 및 무결성 손상입니다.
검증 결함은 공통 매개변수 핸들러에 있으므로 모든 부동소수점 유형 매개변수가 영향을 받습니다.
ARSPD_FBW_MIN을 대상으로 하는 조용한 NaN(0x7FC00000)을 전달하는 단일 인증되지 않은 PARAM_SET:
python3 poc/CVE-2026-36522.py [host:port] # 기본값 tcp:127.0.0.1:5760
poc/CVE-2026-36522.py를 참조하십시오.
캡처된 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)) {
// 거부: 값이 범위를 벗어남
return;
}
| 날짜 | 이벤트 |
|---|---|
| 2026-02-26 | MITRE에 CVE 요청 제출 |
| 2026-02-26 | 공급업체(ArduPilot)에 통보 |
| 2026-06-15 | CVE-2026-36522 할당; PoC 및 스택 추적 게시 |
Sebastien Arseneault — Deep Woods Security