Supported Versions
Security fixes are applied to the current supported release line. Before
1.0.0, use the latest published version or the default branch when evaluating
security-related fixes.
Reporting a Vulnerability
Report vulnerabilities privately to the maintainer before opening public issues with exploit details. Include the affected version or commit, a concise reproduction, and the transport or generator input involved.
Security Model
XMAVLink is a MAVLink transport and code generation library. MAVLink networks are often local radio, serial, simulator, or vehicle LAN links, and unauthenticated peers can send valid MAVLink frames unless the deployment adds its own access control.
Current trust boundaries:
- MAVLink 1 and unsigned MAVLink 2 frames are parsed and routed when signing is not configured.
- Router-level MAVLink 2 signing can be configured for connections. Signed
frames are verified before unpacking, replay timestamps are tracked per
connection, and unsigned MAVLink 2 inbound frames are rejected by default
while signing is enabled unless
accept_unsigned: trueis set. MAVLink 1 inbound frames remain accepted under a signing policy. Unsigned outbound MAVLink 2 frames sent over signing-enabled connections are signed with a monotonically incremented per-connection timestamp. Applications can configure timestamp load/save hooks to preserve local signing timestamps across restarts. Frames with other incompatible MAVLink 2 flags are discarded. SETUP_SIGNINGframes carry key material. InboundSETUP_SIGNINGframes are delivered locally for application handling but are not forwarded from one MAVLink connection to another by the generic router.- UDP listeners should be exposed only to trusted networks unless the application adds network-level filtering or validates peers at a higher layer.
- Utility processes are opt-in. When enabled,
CacheManagersubscribes to traffic and, by default, requests parameter lists from newly seen vehicles. Useutilities: [auto_param_request: false]or passauto_param_request: falsetoXMAVLink.Util.Supervisorwhen vehicle discovery happens on a less trusted network. mix xmavlinktreats MAVLink XML dialect files as trusted build inputs. The parser applies include graph and size limits, but you should not run the generator on arbitrary untrusted XML.
Deployment Checklist
- Expose UDP listeners only on trusted networks, VPNs, or filtered interfaces.
- Prefer MAVLink 2 signing on links where peers are not fully trusted.
- Keep
accept_unsigned: falseunless a migration or mixed-link deployment explicitly requires unsigned MAVLink 2 frames on a signed connection. - Persist signing timestamps with the configured load/save callbacks when restart replay protection matters.
- Treat signing keys and
SETUP_SIGNINGpayloads as secrets. - Disable utility
auto_param_requeston less trusted networks and request parameter lists only after a peer is expected. - Run routers with
remote_forwarding: falsefor endpoint or GCS deployments that should not bridge traffic between remote links. - Validate firewall, routing, and serial-device ownership outside XMAVLink; the library parses and routes MAVLink frames but does not authenticate peers at the network layer.