CVE-2025-68138EVerest是一个开源的电动汽车充电软件栈,libocpp是Open Charge Point Protocol (OCPP)的C++实现。在libocpp 0.30.1之前的版本中,websocket_libwebsockets.cpp文件中的strdup调用返回的指针从未被正确释放。每次客户端尝试建立websocket连接时,都会通过strdup分配新的内存用于存储URI字符串,但由于缺少对应的free调用,这些内存无法被回收。随着连接请求的不断累积,未释放的内存会持续增长,最终可能导致内存耗尽,引发拒绝服务(DoS)攻击。该漏洞的CVSS评分为4.7,属于中危级别,攻击向量为邻接网络,攻击者无需认证即可发起攻击。由于电动汽车充电站通常部署在公共或半公共场所,攻击者可以相对容易地接触到网络进行攻击。
漏洞根源位于EVerest/libocpp项目中的websocket_libwebsockets.cpp文件。在websocket连接建立过程中,代码使用strdup函数复制URI字符串,但未在连接关闭或错误处理路径中释放这些分配的内存。当websocket连接尝试失败或正常关闭时,已分配的内存块未被释放就直接丢失引用,形成内存泄漏。具体问题代码位置在lib/ocpp/common/websocket/websocket_libwebsockets.cpp的连接处理逻辑中。攻击者可以通过向受影响的充电站系统发送大量websocket连接请求来触发此漏洞。每次连接尝试都会分配新的内存,而由于内存泄漏,这些内存不会返回到系统的可用内存池。在足够多的连接尝试后,系统将耗尽可用内存,导致进程崩溃或系统变得极不稳定,无法正常处理合法的充电请求。由于该漏洞影响的是电动汽车充电基础设施,攻击成功可能导致充电站服务中断,影响用户体验。