CVE-2025-2615CVE-2025-2615是GitLab发现的一个中等严重性安全漏洞。该漏洞存在于GitLab的GraphQL订阅功能中,影响所有从16.7版本开始到18.3.6之前、18.4版本到18.4.4之前以及18.5版本到18.5.2之前的GitLab社区版(CE)和企业版(EE)。漏洞的根本原因在于GitLab未能正确验证被阻止用户的访问权限。当一个用户被GitLab管理员阻止后,该用户理论上应该无法访问任何敏感资源或信息。然而,由于GraphQL订阅功能通过WebSocket协议实现,系统的访问控制检查存在缺陷,允许被阻止的用户仍然能够建立GraphQL订阅连接。一旦连接建立,攻击者可以订阅特定的GraphQL事件流,从而可能获取其他用户或项目的敏感信息,包括项目详情、代码片段、用户数据等。此漏洞的CVSS评分为4.3,属于中等严重性级别,主要影响系统的机密性。攻击者需要拥有GitLab账户(即使是已被阻止的账户)才能发起攻击,这降低了漏洞的利用门槛。该漏洞由[email protected]发现并报告,GitLab已于2025年11月12日发布补丁版本18.5.2、18.4.4和18.3.6来修复此问题。建议所有使用受影响版本的用户尽快升级到最新补丁版本以消除安全风险。
该漏洞的技术根源在于GitLab的GraphQL订阅机制与WebSocket连接处理中的访问控制逻辑缺陷。在正常的用户管理流程中,当管理员阻止一个用户账户时,系统应该立即终止该用户的所有活动会话并阻止其进一步访问资源。然而,GitLab的WebSocket连接建立过程中,对GraphQL订阅请求的权限验证存在漏洞。具体来说,当被阻止的用户尝试通过WebSocket协议建立GraphQL连接时,系统未能正确检查用户账户状态。GraphQL订阅功能允许客户端实时接收服务器推送的数据更新,攻击者可以指定订阅特定的查询类型,如项目更新、问题追踪、代码提交等事件。一旦WebSocket连接建立并成功订阅,攻击者就能持续接收敏感数据流。漏洞利用的关键在于:WebSocket握手机制与HTTP认证是分离的,且GraphQL订阅的生命周期管理未与用户状态变更同步。这意味着即使用户在连接建立后被阻止,已建立的订阅连接可能仍然保持活跃状态。此外,GraphQL的订阅机制使用特定的协议(graphql-ws或subscriptions-transport-ws),这些协议在连接初始化时的验证不够严格,未能强制检查用户账户状态。攻击者只需要一个已被阻止的账户凭证即可发起攻击,无需特殊的权限或复杂的攻击准备。