Severity by source
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:L/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Analyzer must be run by an operator over attacker-supplied input (UI:R, AV:L, PR:N); impact is a crash only, so availability-high with no confidentiality or integrity impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
CANBoat through 6.22, fixed in commit a5a22b7, contains an off-by-one global buffer overflow in the searchForPgn() function in analyzer/pgn.c that allows remote attackers to crash the application. Attackers can deliver a crafted NMEA-2000 message with an out-of-range PGN value over CAN bus or N2K-over-IP to trigger an out-of-bounds array access and denial of service.
AnalysisAI
Denial of service in CANBoat (the open-source NMEA 2000/CAN bus analyzer) through version 6.22 allows attackers to crash the analyzer by delivering a crafted NMEA-2000 message containing an out-of-range PGN value. The flaw is an off-by-one global buffer overflow in the searchForPgn() binary-search routine in analyzer/pgn.c, where an out-of-range PGN causes a one-element read past the end of the pgnList[] table. Publicly available exploit code exists (FuzzingLabs PoC value 393216 via issue #644), and a vendor patch is available; there is no public exploit identified as actively exploited.
Technical ContextAI
CANBoat is a toolset for decoding and encoding NMEA 2000 (N2K) marine network messages carried over CAN bus or tunneled as N2K-over-IP. Its analyzer maintains a sorted table, pgnList[], of known Parameter Group Numbers (PGNs) and resolves an incoming message's PGN via the searchForPgn() binary search in analyzer/pgn.c. The root cause is CWE-193 (off-by-one error): the search used an inclusive 'while (start <= end)' loop with 'end = mid - 1', so a PGN larger than every table entry converged to read pgnList[pgnListSize] - exactly one element beyond the array, a global buffer over-read. The fix in commit a5a22b7 (PR #649) switches to a half-open range 'while (start < end)' with 'end = mid', adds a 'mid >= pgnListSize' bounds guard, and uses overflow-safe midpoint arithmetic; the same PR also clamps an unrelated undefined 64-bit shift in fieldtype.c getMaxRange(). The affected product is identified by CPE cpe:2.3:a:canboat:canboat:*:*:*:*:*:*:*:* across all versions through 6.22.
RemediationAI
Upstream fix available (PR/commit); a released patched version is not independently confirmed from the input - update CANBoat to a build that includes commit a5a22b7 (PR #649), which is past the 6.22 release line. If you cannot rebuild immediately, the practical compensating control is to avoid feeding the analyzer untrusted or unvalidated N2K data: restrict the analyzer to known-good logs or trusted N2K sources, and isolate CANBoat hosts from any network path that could deliver attacker-crafted N2K-over-IP traffic (e.g., segment the marine/CAN network and block external access to the N2K-over-IP listener), accepting the trade-off that this limits live monitoring of untrusted segments. Because the impact is a crash rather than code execution, automatic restart/supervision of the analyzer process can reduce downtime as a stopgap. Track the patch through the vendor advisory at https://www.vulncheck.com/advisories/canboat-off-by-one-global-buffer-overflow-in-searchforpgn and the commit URL above.
Same weakness CWE-193 – Off-by-one Error
View allSame technique Buffer Overflow
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-39532
GHSA-p2cc-x7hq-6jvm