
CVE-2026-36522: injeção não autenticada de NaN via MAVLink PARAM_SET no ArduPilot ArduPlane (CWE-1287, DoS/integridade)
Injeção de NaN Não Autenticada via MAVLink PARAM_SET no ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Validação Incorreta do 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 |
| Afetado | ArduPilot ArduPlane 4.0.1 (confirmado) |
| Componente | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| Vetor | MAVLink remoto, não autenticado |
| Impacto | Negação de serviço (SITL) / corrupção silenciosa de parâmetros de voo (hardware) |
| Reportado por | Sebastien Arseneault, Deep Woods Security |
handle_param_set() aceita um valor de ponto flutuante IEEE 754 de uma
mensagem MAVLink PARAM_SET não autenticada sem validá-lo quanto a NaN ou
infinito. O valor malformado alcança uma comparação de ponto flutuante
(is_equal<float,float>() em AP_Math.cpp) sem verificação de tipo ou valor.
Esta não é uma vulnerabilidade de execução de código. O impacto é negação de serviço e corrupção de integridade.
A lacuna de validação está no manipulador comum de parâmetros, portanto todos os parâmetros de tipo float são afetados.
Um único PARAM_SET não autenticado carregando um NaN silencioso (0x7FC00000)
direcionado 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.
Rastreamento de pilha SITL capturado (stacktrace.txt)
mostrando a entrada externa alcançando a comparação sem proteção:
#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}
A cadeia de chamadas (update_receive -> packetReceived ->
handle_common_message -> handle_param_set) confirma que o caminho é
alcançável a partir de entrada de rede não autenticada.
Valide o valor recebido antes do uso:
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// reject: value out of range
return;
}
| Data | Evento |
|---|---|
| 2026-02-26 | Solicitação de CVE submetida à MITRE |
| 2026-02-26 | Fornecedor notificado (ArduPilot) |
| 2026-06-15 | CVE-2026-36522 atribuído; PoC e rastreamento de pilha publicados |
Sebastien Arseneault — Deep Woods Security