CVE-2026-27815EVerest 是一个开源的电动汽车(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)或潜在的代码执行风险。