
CVE-2026-36522: iniezione NaN non autenticata tramite MAVLink PARAM_SET in ArduPilot ArduPlane (CWE-1287, DoS/integrità)
Iniezione NaN non autenticata tramite MAVLink PARAM_SET in ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Convalida impropria del tipo di input specificato) |
| CVSS 3.1 | 9.1 Critico — AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |
| Interessato | ArduPilot ArduPlane 4.0.1 (confermato) |
| Componente | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| Vettore | MAVLink remoto, non autenticato |
| Impatto | Denial of service (SITL) / corruzione silenziosa dei parametri di volo (hardware) |
| Segnalatore | Sebastien Arseneault, Deep Woods Security |
handle_param_set() accetta un valore IEEE 754 in virgola mobile da un
messaggio MAVLink PARAM_SET non autenticato senza convalidarlo per NaN o
infinito. Il valore malformato raggiunge un confronto in virgola mobile
(is_equal<float,float>() in AP_Math.cpp) senza alcun controllo di tipo o valore.
Non si tratta di una vulnerabilità di esecuzione di codice. L'impatto è il denial of service e la corruzione dell'integrità.
La lacuna di validazione è nel gestore dei parametri comune, quindi tutti i parametri di tipo float sono interessati.
Un singolo PARAM_SET non autenticato che trasporta un NaN silenzioso (0x7FC00000)
mirato a ARSPD_FBW_MIN:
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
Vedi poc/CVE-2026-36522.py.
Stack trace SITL catturato (stacktrace.txt) che mostra l'input
esterno che raggiunge il confronto non protetto:
#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 catena di chiamate (update_receive -> packetReceived -> handle_common_message
-> handle_param_set) conferma che il percorso è raggiungibile da input di rete
non autenticato.
Convalidare il valore in ingresso prima dell'uso:
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// rifiuta: valore fuori range
return;
}
| Data | Evento |
|---|---|
| 2026-02-26 | Richiesta CVE inviata a MITRE |
| 2026-02-26 | Fornitore notificato (ArduPilot) |
| 2026-06-15 | CVE-2026-36522 assegnato; PoC e stack trace pubblicati |
Sebastien Arseneault — Deep Woods Security