
CVE-2026-36522: unauthenticated NaN injection via MAVLink PARAM_SET in ArduPilot ArduPlane (CWE-1287, DoS/integrity)
Unberechtigte NaN-Injektion über MAVLink PARAM_SET in ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (Unzureichende Validierung des angegebenen Eingabetyps) |
| CVSS 3.1 | 9.1 Kritisch — AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |
| Affected | ArduPilot ArduPlane 4.0.1 (bestätigt) |
| Component | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| Vector | Remote, unberechtigt MAVLink |
| Impact | Denial of Service (SITL) / stille Korruption von Flugparametern (Hardware) |
| Reporter | Sebastien Arseneault, Deep Woods Security |
handle_param_set() akzeptiert einen IEEE 754-Gleitkommawert aus einer unberechtigten MAVLink PARAM_SET Nachricht, ohne ihn auf NaN oder Unendlichkeit zu validieren. Der fehlerhafte Wert erreicht einen Gleitkomma-Vergleich (is_equal<float,float>() in AP_Math.cpp) ohne Typ- oder Werteprüfung.
Dabei handelt es sich nicht um eine Schwachstelle zur Codeausführung. Die Auswirkungen sind Denial of Service und Integritätsverletzung.
Die Validierungslücke befindet sich im gemeinsamen Parameter-Handler, sodass alle float-typisierten Parameter betroffen sind.
Eine einzelne unberechtigte PARAM_SET Nachricht, die ein Quiet-NaN (0x7FC00000) enthält und auf ARSPD_FBW_MIN abzielt:
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
Siehe poc/CVE-2026-36522.py.
Erfasster SITL-Stacktrace (stacktrace.txt), der zeigt, wie die externe Eingabe den ungeschützten Vergleich erreicht:
#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}
Die Aufrufkette (update_receive -> packetReceived -> handle_common_message -> handle_param_set) bestätigt, dass der Pfad von unberechtigter Netzwerkeingabe aus erreichbar ist.
Validieren Sie den eingehenden Wert vor der Verwendung:
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// reject: value out of range
return;
}
| Datum | Ereignis |
|---|---|
| 2026-02-26 | CVE-Anforderung an MITRE gesendet |
| 2026-02-26 | Anbieter benachrichtigt (ArduPilot) |
| 2026-06-15 | CVE-2026-36522 zugewiesen; PoC und Stacktrace veröffentlicht |
Sebastien Arseneault — Deep Woods Security