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: true is 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_SIGNING frames carry key material. Inbound SETUP_SIGNING frames 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, CacheManager subscribes to traffic and, by default, requests parameter lists from newly seen vehicles. Use utilities: [auto_param_request: false] or pass auto_param_request: false to XMAVLink.Util.Supervisor when vehicle discovery happens on a less trusted network.
  • mix xmavlink treats 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: false unless 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_SIGNING payloads as secrets.
  • Disable utility auto_param_request on less trusted networks and request parameter lists only after a peer is expected.
  • Run routers with remote_forwarding: false for 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.