关键信息 提交人 sh7err@vEcho 被测试的版本 commit 1cfaed4b35117e4871bc3dfeae073f61d8e3bb3d (branch: develop) 漏洞概述 Scada-LTS 关闭了 Spring Security 的跨站请求伪造 (CSRF) 保护,导致许多会改变状态的接口暴露在 CSRF 攻击下。任何攻击者控制的网页都可以触发已认证的浏览器对如 /api/watch-lists 或 /api/reports/save 等端点执行 POST/PUT/DELETE 请求,从而在受害者的账号下造成未授权的状态变更。 产品与版本 Product: Scada-LTS (GitHub 链接) 受影响版本: 所有在 commit 1cfaed4b35117e4871bc3dfeae073f61d8e3bb3d 之前和包含该 commit 的版本 修复版本: 尚未修复 漏洞细节 根本原因分析: WebContent/WEB-INF/spring-security.xml 文件中的每个 块都通过 设置禁用了 CSRF 保护;REST 端点完全依赖现有的会话 cookie 进行认证。 概念验证 1. 受害者在浏览器 A 中登录 Scada-LTS Web UI 并保持登录状态。 2. 受害者在另一标签中访问攻击者控制的页面,该页面包含以下内容: 3. 由于 CSRF 保护被禁用,浏览器会自动包含受害者的 JSESSIONID,Scada-LTS 创建了一个新的由受害者所有但未经其同意的监控列表。 影响 未经授权的创建、修改或删除监控列表、报告、用户设置、系统设置等。 如果与其他漏洞结合,可能导致权限提升(例如,替换由管理员执行的脚本)。 影响操作审核和对操作者行为的信任。 修复建议 1. 重新启用 Spring Security CSRF 保护(移除 或设置为启用状态)。 2. 对不能支持 cookie/CSRF 令牌的 API 客户端,提供专用的无状态端点(例如,通过 HTTP 基本认证或基于令牌的认证),同时保持浏览器流量的 CSRF 保护。 3. 考虑强制执行 SameSite cookie,并在每次请求中添加唯一值作为深度防御措施。 发现者 sh7err@vEcho