
CVE-2026-36522: ArduPilot ArduPlaneにおけるMAVLink PARAM_SETを介した認証不要のNaNインジェクション(CWE-1287, DoS/integrity)
MAVLink PARAM_SET を介した未認証のNaNインジェクション (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() は、NaN や無限大の検証を行わずに、認証されていない MAVLink PARAM_SET メッセージから IEEE 754 浮動小数点値を受け入れます。不正な値は、型や値のチェックなしに浮動小数点比較 (AP_Math.cpp 内の is_equal<float,float>()) に到達します。
これはコード実行の脆弱性ではありません。影響はサービス拒否と整合性の破損です。
検証の欠落は共通パラメータハンドラにあり、そのため全ての浮動小数点型パラメータが影響を受けます。
1つの認証されていないPARAM_SETが、ARSPD_FBW_MINを対象とした静かなNaN (0x7FC00000) を運びます。
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)) {
// reject: value out of range
return;
}
| 日付 | イベント |
|---|---|
| 2026-02-26 | CVEリクエストをMITREに提出 |
| 2026-02-26 | ベンダーに通知 (ArduPilot) |
| 2026-06-15 | CVE-2026-36522が割り当てられました。PoCとスタックトレースを公開 |
Sebastien Arseneault — Deep Woods Security