关键漏洞信息 漏洞详情 漏洞类型: Authenticated SQL Injection via dynamic ORDER BY 受影响产品: WebStack-Guns (基于Spring Boot的书签CMS) 受影响版本: 1.0 (当前主分支) 测试环境: commit HEAD of https://github.com/jsnjfz/WebStack-Guns on Java 8 / MySQL 5.7 CVSS v3.1 Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (基础分数 8.8) 漏洞描述 Summary: 管理日志查看器(/log/list 和 /loginLog/list)接受HTTP请求中的任意 sort 参数,并通过MyBatis ${} 替换将它们传递到构造 ORDER BY 子句时。由于应用程序故意暴露了一个可配置的排序功能,没有任何验证或白名单存在。任何经过身份验证的管理员都可以注入执行具有应用程序数据库权限的SQL表达式。 Root Cause Analysis: 直接从HTTP请求中获取 sort 和 order 并存储在MyBatis Page对象上,未经过滤。 和 继续将 传递给各自的映射器方法,没有检查字段名称。 MyBatis XML文件在 ORDER BY 子句内嵌入了 ${orderByField},因此提供的字符串被直接连接到SQL语句中,绕过了准备好的语句保护。 不存在白名单或映射的批准列名,所以定制的SQL会以应用程序的数据库凭证执行。 影响 任何经过身份验证的管理员(或攻击者控制了这样的帐户)可以在WebStack-Guns数据库中实现任意SQL执行。这使得可以转储或篡改所有门户数据,更改用户密码,并且可能通过基于时间的载荷影响可用性。由于项目提供了公开记录的默认管理员凭证,远程开发可能利用未加固的部署。 建议的修复措施 1. 使用安全的枚举基础映射替换 ${orderByField},在服务器端定义可排序列的白名单,并在构建SQL之前将用户提供的标识符转换为已知列名。 2. 避免在 ORDER BY 中的字符串替换。使用MyBatis-Plus排序帮助程序或实现条件逻辑,以编程方式附加列标记。 3. 在初始设置期间禁用或限制默认管理员凭证,以减少经过身份验证的攻击向量的暴露。