Unauthenticated NaN Injection via MAVLink PARAM_SET in ArduPilot ArduPlane (CVE-2026-36522)
by deepwoodssec · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-36522
- Category
- network
- Affected product
- ArduPilot ArduPlane
- Affected versions
- 4.0.1 (confirmed)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-06 |
| Author / Researcher | deepwoodssec |
| CVE / Advisory | CVE-2026-36522 |
| Category | network |
| Severity | Critical |
| CVSS Score | 9.1 (CVSSv3.1) |
| Status | Weaponized |
| Tags | ardupilot, mavlink, drone, nan-injection, unauthenticated, cwe-1287 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | ArduPilot ArduPlane |
| Versions Affected | 4.0.1 (confirmed) |
| Language / Platform | Python PoC (MAVLink) |
| Authentication Required | No |
| Network Access Required | Yes (MAVLink, typically over radio/UDP telemetry link) |
Summary
ArduPilot ArduPlane’s GCS_MAVLink::handle_param_set() does not validate that a parameter value supplied via a MAVLink PARAM_SET message is a well-formed floating-point number. An unauthenticated party able to send MAVLink messages to the vehicle can inject a NaN (Not-a-Number) value into a flight-control parameter, causing undefined/unsafe behavior in dependent flight-control logic.
Vulnerability Details
Root Cause
handle_param_set() accepts and stores attacker-supplied parameter values from PARAM_SET without validating against NaN/Inf per CWE-1287 (Improper Validation of Specified Type of Input).
Attack Vector
- Gain the ability to send MAVLink messages to the target vehicle (e.g. via an unencrypted telemetry radio link).
- Send a
PARAM_SETmessage with a NaN value for a flight-critical parameter. - ArduPlane accepts and stores the NaN parameter, causing dependent flight-control calculations to behave unpredictably.
Impact
Unauthenticated MAVLink access can inject NaN values into flight-control parameters, risking loss of flight-control integrity.
Environment / Lab Setup
Target: ArduPilot ArduPlane 4.0.1 (and potentially other versions) with reachable MAVLink interface
Attacker: Python 3 + pymavlink
Proof of Concept
PoC Script
See
CVE-2026-36522.pyin this folder.
| |
Sends a crafted MAVLink PARAM_SET message with a NaN value for the specified parameter and confirms it is accepted by the target vehicle.
Detection & Indicators of Compromise
Signs of compromise:
- Flight parameters read back as NaN via PARAM_REQUEST_READ
- Unexplained erratic flight-control behavior following telemetry link activity
Remediation
| Action | Detail |
|---|---|
| Primary fix | Apply the upstream ArduPilot fix validating parameter values against NaN/Inf in handle_param_set() once available |
| Interim mitigation | Encrypt/authenticate the MAVLink telemetry link (e.g. via MAVLink 2 signing) to prevent unauthenticated message injection |
References
Notes
Mirrored from https://github.com/deepwoodssec/CVE-2026-36522 on 2026-07-05.
| |