
CVE-2026-36522: حقن NaN غير مصادق عليه عبر MAVLink PARAM_SET في ArduPilot ArduPlane (CWE-1287, DoS/integrity)
حقن NaN غير مصدق عبر MAVLink PARAM_SET في ArduPilot ArduPlane
| CVE | CVE-2026-36522 |
| CWE | CWE-1287 (التحقق غير السليم من النوع المحدد للمدخل) |
| CVSS 3.1 | 9.1 حرج — AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |
| المتأثر | ArduPilot ArduPlane 4.0.1 (مؤكد) |
| المكوّن | GCS_MAVLINK::handle_param_set() — libraries/GCS_MAVLink/GCS_Param.cpp |
| الناقل | MAVLink عن بعد غير مصدق |
| التأثير | رفض الخدمة (SITL) / تلف معلمات الطيران الصامت (الأجهزة) |
| المبلغ | Sebastien Arseneault, Deep Woods Security |
تقوم handle_param_set() بقبول قيمة فاصلة عائمة بتنسيق IEEE 754 من رسالة
PARAM_SET غير مصدقة عبر MAVLink دون التحقق من كونها NaN أو لا نهائية.
تصل القيمة المشوهة إلى مقارنة فاصلة عائمة
(is_equal<float,float>() في AP_Math.cpp) دون أي فحص للنوع أو القيمة.
هذه ليست ثغرة لتنفيذ الأوامر. التأثير هو رفض الخدمة وتلف السلامة.
الفجوة في التحقق موجودة في معالج المعلمات العام، لذلك تتأثر جميع المعلمات من النوع العائم.
رسالة PARAM_SET واحدة غير مصدقة تحمل NaN هادئة (0x7FC00000) موجهة إلى
ARSPD_FBW_MIN:
python3 poc/CVE-2026-36522.py [host:port] # default tcp:127.0.0.1:5760
انظر poc/CVE-2026-36522.py.
تتبع المكدس الملتقط من SITL (stacktrace.txt) يوضح وصول
المدخل الخارجي إلى المقارنة غير المحمية:
#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}
سلسلة الاستدعاءات (update_receive -> packetReceived -> handle_common_message
-> handle_param_set) تؤكد أن المسار يمكن الوصول إليه من مدخل شبكة غير مصدق.
التحقق من القيمة الواردة قبل استخدامها:
if (isnan(packet.param_value) || isinf(packet.param_value)) {
// رفض: القيمة خارج النطاق
return;
}
| التاريخ | الحدث |
|---|---|
| 2026-02-26 | تقديم طلب CVE إلى MITRE |
| 2026-02-26 | إخطار البائع (ArduPilot) |
| 2026-06-15 | تعيين CVE-2026-36522; نشر إثبات المفهوم وتتبع المكدس |
Sebastien Arseneault — Deep Woods Security