CVE-2026-37537collin80/Open-SAE-J1939 项目在传输协议数据传输处理中存在严重漏洞。该漏洞源于整数下溢,发生在 `uint8_t index = data[0] - 1` 处。当CAN帧序列号 `data[0]` 为0时,索引下溢为255。后续写入时计算出的偏移量1791超出了 `MAX_TP_DT` 缓冲区(1785字节)限制,导致6字节越界写入。攻击者可通过邻接网络利用此漏洞,无需认证即可破坏系统完整性和可用性。
该漏洞位于 `collin80/Open-SAE-J1939` 仓库的传输协议数据传输(Transport Protocol Data Transfer)处理逻辑中。漏洞的根本原因是对无符号整型变量 `index` 的计算缺乏边界检查。代码 `uint8_t index = data[0] - 1` 假设 `data[0]`(序列号)至少为1。然而,当攻击者发送特制的CAN数据帧,并将序列号设置为0时,由于无符号整数下溢,`index` 的值变为255。在后续的数据写入操作中,代码利用该索引计算写入地址:`tp_dt->data[255*7 + i-1]`。由于索引异常,最终计算的偏移量为1791字节。而目标缓冲区 `MAX_TP_DT` 的大小仅为1785字节。这意味着写入操作超出了缓冲区末尾6个字节的位置。这种越界写入属于内存破坏漏洞,可能导致程序崩溃、数据损坏,或者在特定条件下执行任意代码。攻击向量为邻接网络(AV:A),意味着攻击者必须位于本地网络子网内才能发送恶意CAN帧。由于无需用户交互(UI:N)且无需认证(PR:N),该漏洞对车载网络或工业控制系统中的设备构成高危威胁。