漏洞概述 漏洞名称: Incorrect Access Control on Session Handles #565 漏洞描述: OpENer (commit 7695cf1) 在处理封装会话时存在一个不正确的访问控制漏洞。当服务器处理关键封装命令时,它会验证提供的 是否存在于全局会话列表中,但不会验证该句柄是否属于发起请求的特定 TCP 连接。由于会话句柄和原始套接字之间没有强绑定,网络上的任何攻击者都可以使用另一个合法客户端创建的合法会话句柄来绕过访问控制。这种访问控制失败会导致严重的影响,包括会话劫持和跨连接 DoS。 根本原因: 缺少套接字绑定验证: 在 中, 函数仅检查提供的 是否激活,而不验证会话是否由发出请求的套接字拥有。 重用认证缺陷: 此不适当的检查用于多个关键命令路径(例如, 、 ),允许攻击者使用受害者的句柄通过完全不同的 TCP 连接进行身份验证。 跨连接注销: 路径仅基于句柄关闭会话资源,而不验证请求的原始套接字。这使得攻击者可以远程终止任何活动会话。 可预测的句柄: 会话句柄生成的是小的、可预测的整数(例如, ),显著降低了枚举活动会话的访问控制复杂性。 触发条件: 1. 目标设备正在运行 OpENer 并监听默认 ENIP TCP 端口 (44818)。 2. 合法客户端建立 TCP 连接并注册会话(接收可预测的 )。 3. 攻击者建立单独的 TCP 连接到 ENIP 端口。 4. 攻击者发送封装命令(例如, 或 ),携带合法客户端的 。 影响范围 会话劫持 (完整性): 在工业控制系统中,未经授权的访问允许攻击者以合法控制器的身份注入恶意控制命令或读取敏感操作数据,破坏通信的完整性。 跨连接 DoS (可用性): 能够单方面终止活动会话允许网络攻击者持续中断 PLC、HMI 和 OpENer 设备之间的关键通信,严重降低操作可用性。 修复方案 1. 实现套接字绑定验证: 在 函数中,除了检查 是否激活外,还应验证会话是否由发出请求的套接字拥有。 2. 增强认证机制: 对所有关键命令路径(如 、 )实施更严格的认证检查,确保只有合法的套接字可以使用特定的会话句柄。 3. 跨连接注销保护: 在 路径中,除了基于句柄关闭会话资源外,还应验证请求的原始套接字,防止远程终止活动会话。 4. 改进句柄生成: 使用更复杂的、不可预测的会话句柄生成算法,增加枚举活动会话的难度。 POC 代码