汽车 CAN 协议库缓冲区溢出漏洞总结 漏洞概述 该报告披露了多个汽车 CAN 协议库中存在的缓冲区溢出漏洞,包括整数下溢、栈溢出、堆溢出和整数溢出等类型。这些漏洞大多具有极高的 CVSS 评分(9.8),表明其严重程度很高。 影响范围 受影响库:Open-SAE-J1939、openxc/isotp-c、miaofng/uds-c、collin80/Open-SAE-J1939、socketcand、cannelloni、OpenAMP、OVM3 影响系统:汽车 ECU、CAN 总线网关、车辆诊断工具 影响场景:生产车辆、工业网络、研究平台 修复方案 1. Open-SAE-J1939:修复 计算逻辑,防止整数下溢和栈溢出 2. openxc/isotp-c:添加累积载荷大小检查,确保不超过接收缓冲区 3. miaofng/uds-c:在 前添加长度验证 4. collin80/Open-SAE-J1939:修复包长度计算,防止整数溢出 5. socketcand:验证 CAN ID 字符串长度 6. cannelloni:添加边界检查,防止缓冲区溢出 7. OpenAMP:修复 ELF 加载时的算术运算,防止整数溢出 8. OVM3:添加上界检查,防止栈溢出 详细漏洞信息 具体漏洞描述 CVE-2026-37534 / CVE-2026-42467 — Open-SAE-J1939 J1939 消息解析在收到畸形帧时, 计算会回绕,导致越界值。第二个独立的栈缓冲区溢出跟踪为 CVE-2026-42467。 攻击向量:通过网络或本地总线发送的伪造 CAN 帧 CVE-2026-37535 — openxc/isotp-c ISO 15765-2 多帧重组在 中没有检查累积载荷是否适合接收缓冲区,导致越界读取。 CVE-2026-37536 — miaofng/uds-c UDS (ISO 14229) 请求构建器在 中将服务数据 到固定大小的栈缓冲区。长度参数直接来自请求结构,攻击者可控,且没有边界检查。 CVE-2026-37537 — collin80/Open-SAE-J1939 包长度计算溢出,产生足够小通过分配但足够大以吹过后续 的缓冲区。堆损坏随之而来。 CVE-2026-37538 — socketcand 在 中, 将 CAN 帧标识符字符串复制到栈缓冲区。长度从未验证。足够长的 CAN ID 会直接越过末尾。 CVE-2026-37539 — cannelloni 在 中处理通过 UDP、TCP 或 SCTP 隧穿的 CAN 帧。帧计数和每帧数据长度来自攻击者。在将帧数据写入接收缓冲区之前没有进行边界检查。网络可达,无需身份验证,CVSS 9.8。 CVE-2026-37540 — OpenAMP ELF 加载器 OpenAMP 2025.10.0 通过 ELF 映像远程处理固件。处理 段时,目标区域的尺寸计算使用从 ELF 头直接拉出的字段上的 32 位算术。乘法溢出后,结果用于门控 长度检查。伪造的固件映像在加载序列期间损坏主机内存。 CVE-2026-37541 / CVE-2026-42468 / CVE-2026-42469 — OVM3 Open Vehicle Monitoring System 3 v3.3.005 中的三个独立 CAN 日志解析器,每个都有相同类型的错误: CVE-2026-37541: ,GVRET 日志格式 CVE-2026-42468: ,PCAP/pcapng 格式 CVE-2026-42469: ,CANswitch 日志格式 每种情况下,来自日志文件头的字段长度驱动 到固定大小的栈缓冲区。没有上界检查。伪造的日志文件触发溢出。