
CVE-2026-36522: inyección NaN no autenticada mediante MAVLink PARAM_SET en ArduPilot ArduPlane (CWE-1287, DoS/integridad)
Inyección no autenticada de NaN a través de MAVLink PARAM_SET en ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Validación incorrecta del tipo de entrada especificado) |
| CVSS 3.1 | 9.1 Crítico — AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |
| Afectado | ArduPilot ArduPlane 4.0.1 (confirmado) |
| Componente | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| Vector | Remoto, MAVLink no autenticado |
| Impacto | Denegación de servicio (SITL) / corrupción silenciosa de parámetros de vuelo (hardware) |
| Notificador | Sebastien Arseneault, Deep Woods Security |
handle_param_set() acepta un valor de punto flotante IEEE 754 de un mensaje MAVLink PARAM_SET no autenticado sin validarlo en busca de NaN o infinito. El valor malformado llega a una comparación de punto flotante (is_equal<float,float>() en AP_Math.cpp) sin ninguna comprobación de tipo o valor.
Esto no es una vulnerabilidad de ejecución de código. El impacto es denegación de servicio y corrupción de integridad.
La laguna de validación está en el manejador común de parámetros, por lo que todos los parámetros de tipo flotante se ven afectados.
Un único PARAM_SET no autenticado que transporta un NaN silencioso (0x7FC00000) dirigido a ARSPD_FBW_MIN:
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
Consulte poc/CVE-2026-36522.py.
Traza de pila SITL capturada (stacktrace.txt) que muestra la entrada externa alcanzando la comparación sin protección:
#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}
La cadena de llamadas (update_receive -> packetReceived -> handle_common_message -> handle_param_set) confirma que la ruta es accesible desde una entrada de red no autenticada.
Valide el valor entrante antes de usarlo:
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// reject: value out of range
return;
}
| Fecha | Evento |
|---|---|
| 2026-02-26 | Solicitud de CVE enviada a MITRE |
| 2026-02-26 | Proveedor notificado (ArduPilot) |
| 2026-06-15 | CVE-2026-36522 asignado; PoC y traza de pila publicados |
Sebastien Arseneault — Deep Woods Security