CVE-2026-37530AGL (Automotive Grade Linux) 的 agl-service-can-low-level 组件在 17.1.12 及之前的版本中存在严重的安全漏洞。该漏洞位于 uds-c 库的 send_diagnostic_request 函数中,由于未对 payload_length 字段进行严格的边界检查,导致在处理诊断请求时可能发生栈缓冲区溢出。攻击者无需用户交互或认证即可通过网络利用此漏洞。在缺乏堆栈保护的 32 位 ARM 汽车 ECU 上,该漏洞可能导致返回地址被覆盖,从而实现远程代码执行 (RCE) 或造成服务拒绝。
漏洞根源在于 uds.c 文件中的 send_diagnostic_request 函数逻辑错误。函数在栈上分配了 MAX_DIAGNOSTIC_PAYLOAD_SIZE (6字节) 的缓冲区,但在使用 memcpy 复制数据时,允许的最大长度为 MAX_UDS_REQUEST_PAYLOAD_LENGTH (7字节)。由于写入偏移量为 1+pid_length (通常为2-3字节),实际写入操作会超出缓冲区边界,造成 1 到 4 字节的栈溢出。攻击者可通过构造特制的数据包,将 payload_length 设为 7,从而控制溢出的数据。在未启用 Stack Canaries 保护的 32 位 ARM 架构 ECU 上,这种可控的溢出足以覆盖函数的返回地址,劫持控制流并执行恶意代码。