# 汽车 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**:修复 `size - overhead` 计算逻辑,防止整数下溢和栈溢出 2. **openxc/isotp-c**:添加累积载荷大小检查,确保不超过接收缓冲区 3. **miaofng/uds-c**:在 `memcpy` 前添加长度验证 4. **collin80/Open-SAE-J1939**:修复包长度计算,防止整数溢出 5. **socketcand**:验证 CAN ID 字符串长度 6. **cannelloni**:添加边界检查,防止缓冲区溢出 7. **OpenAMP**:修复 ELF 加载时的算术运算,防止整数溢出 8. **OVM3**:添加上界检查,防止栈溢出 ## 详细漏洞信息 | CVE | 库/产品 | 版本 | 类型 | CVSS | |-----|---------|------|------|------| | CVE-2026-37534 | Open-SAE-J1939 | ≤ b6caf884 | 整数下溢 - OOB 写入 | 9.8 | | CVE-2026-42467 | Open-SAE-J1939 | ≤ b6caf884 | 栈缓冲区溢出 | 9.8 | | CVE-2026-37535 | openxc/isotp-c | ≤ Sa5d1924 | OOB 读取 | 7.5 | | CVE-2026-37536 | miaofng/uds-c | commit e506334e | 栈缓冲区溢出 | 9.8 | | CVE-2026-37537 | collin80/Open-SAE-J1939 | ≤ 744024d4 | 整数溢出 | 9.8 | | CVE-2026-37538 | socketcand | 0.4.2 | 栈缓冲区溢出 | 9.8 | | CVE-2026-37539 | cannelloni | 2.0.0 | 堆缓冲区溢出 (CAN 帧解析) | 9.8 | | CVE-2026-37540 | OpenAMP | 2025.10.0 | 整数溢出 - ELF 加载器 | 9.8 | | CVE-2026-37541 | OVM3 | 3.3.005 | 栈溢出 - GVRET 格式 | 8.8 | | CVE-2026-42468 | OVM3 | 3.3.005 | 栈溢出 - PCAP 格式 | 8.8 | | CVE-2026-42469 | OVM3 | 3.3.005 | 栈溢出 - CANswitch 格式 | 8.8 | ## 具体漏洞描述 ### CVE-2026-37534 / CVE-2026-42467 — Open-SAE-J1939 J1939 消息解析在收到畸形帧时,`size - overhead` 计算会回绕,导致越界值。第二个独立的栈缓冲区溢出跟踪为 CVE-2026-42467。 **攻击向量**:通过网络或本地总线发送的伪造 CAN 帧 ### CVE-2026-37535 — openxc/isotp-c ISO 15765-2 多帧重组在 `isotp-c` 中没有检查累积载荷是否适合接收缓冲区,导致越界读取。 ### CVE-2026-37536 — miaofng/uds-c UDS (ISO 14229) 请求构建器在 `uds.c` 中将服务数据 `memcpy` 到固定大小的栈缓冲区。长度参数直接来自请求结构,攻击者可控,且没有边界检查。 ### CVE-2026-37537 — collin80/Open-SAE-J1939 包长度计算溢出,产生足够小通过分配但足够大以吹过后续 `memcpy` 的缓冲区。堆损坏随之而来。 ### CVE-2026-37538 — socketcand 在 `socketcand.c` 中,`main()` 将 CAN 帧标识符字符串复制到栈缓冲区。长度从未验证。足够长的 CAN ID 会直接越过末尾。 ### CVE-2026-37539 — cannelloni `parseCANFrame()` 在 `parser.cpp` 中处理通过 UDP、TCP 或 SCTP 隧穿的 CAN 帧。帧计数和每帧数据长度来自攻击者。在将帧数据写入接收缓冲区之前没有进行边界检查。网络可达,无需身份验证,CVSS 9.8。 ### CVE-2026-37540 — OpenAMP ELF 加载器 OpenAMP 2025.10.0 通过 ELF 映像远程处理固件。处理 `PT_LOAD` 段时,目标区域的尺寸计算使用从 ELF 头直接拉出的字段上的 32 位算术。乘法溢出后,结果用于门控 `memcpy` 长度检查。伪造的固件映像在加载序列期间损坏主机内存。 ### CVE-2026-37541 / CVE-2026-42468 / CVE-2026-42469 — OVM3 Open Vehicle Monitoring System 3 v3.3.005 中的三个独立 CAN 日志解析器,每个都有相同类型的错误: - **CVE-2026-37541**:`canformat_gvret.cpp`,GVRET 日志格式 - **CVE-2026-42468**:`canformat_pcap.cpp`,PCAP/pcapng 格式 - **CVE-2026-42469**:`canformat_canswitch.cpp`,CANswitch 日志格式 每种情况下,来自日志文件头的字段长度驱动 `memcpy` 到固定大小的栈缓冲区。没有上界检查。伪造的日志文件触发溢出。