CVE-2026-42485AGL agl-service-can-low-level 组件存在栈缓冲区溢出漏洞。该漏洞源于 uds-c 库中 send_diagnostic_request 函数未对 payload_length 进行边界检查,导致复制数据时溢出。攻击者可无需认证利用此漏洞,在缺乏栈保护的 32 位 ARM 汽车 ECU 上覆写返回地址,实现远程代码执行。
漏洞位于 uds.c 文件的 send_diagnostic_request 函数中。该函数在栈上分配了一个大小为 MAX_DIAGNOSTIC_PAYLOAD_SIZE(6 字节)的缓冲区用于存储诊断载荷。然而,在处理数据时,函数直接使用 memcpy 将数据复制到该缓冲区中,偏移量为 1 + pid_length(通常为 2 或 3 字节)。由于 payload_length 字段(uint8_t)缺乏针对目标缓冲区剩余空间的边界检查,当接收到最大长度(7 字节)的数据时,复制操作会超出缓冲区边界。具体而言,在偏移量的基础上再写入 7 字节,会导致 1 到 4 字节的栈溢出。这种溢出允许攻击者精确控制写入栈上的额外数据。在未启用栈金丝雀保护机制的 32 位 ARM 汽车 ECU 环境下,攻击者可以利用此漏洞覆写返回地址,进而劫持控制流并实现远程代码执行(RCE),严重威胁车辆系统的安全。