
CVE-2026-36522: unauthenticated NaN injection via MAVLink PARAM_SET in ArduPilot ArduPlane (CWE-1287, DoS/integrity)
Injection NaN non authentifiée via MAVLink PARAM_SET dans ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Validation incorrecte du type d'entrée spécifié) |
| CVSS 3.1 | 9.1 Critique — AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |
| Affecté | ArduPilot ArduPlane 4.0.1 (confirmé) |
| Composant | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| Vecteur | Réseau distant, MAVLink non authentifié |
| Impact | Déni de service (SITL) / corruption silencieuse des paramètres de vol (matériel) |
| Signaleur | Sebastien Arseneault, Deep Woods Security |
handle_param_set() accepte une valeur flottante IEEE 754 provenant d'un message MAVLink PARAM_SET non authentifié sans la valider pour NaN ou l'infini. La valeur malformée atteint une comparaison en virgule flottante (is_equal<float,float>() dans AP_Math.cpp) sans vérification de type ou de valeur.
Il ne s'agit pas d'une vulnérabilité d'exécution de code. L'impact est un déni de service et une corruption de l'intégrité.
La lacune de validation se trouve dans le gestionnaire de paramètres commun, donc tous les paramètres de type flottant sont affectés.
Un seul PARAM_SET non authentifié transportant un NaN silencieux (0x7FC00000) ciblant ARSPD_FBW_MIN :
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
Voir poc/CVE-2026-36522.py.
Trace de pile SITL capturée (stacktrace.txt) montrant l'entrée externe atteignant la comparaison non protégée :
#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 chaîne d'appels (update_receive -> packetReceived -> handle_common_message -> handle_param_set) confirme que le chemin est accessible à partir d'une entrée réseau non authentifiée.
Valider la valeur entrante avant utilisation :
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// reject: value out of range
return;
}
| Date | Événement |
|---|---|
| 2026-02-26 | Demande CVE soumise à MITRE |
| 2026-02-26 | Fournisseur notifié (ArduPilot) |
| 2026-06-15 | CVE-2026-36522 attribué ; PoC et trace de pile publiés |
Sebastien Arseneault — Deep Woods Security