Gửi #804260: Dromara MaxKey 3.5.13 SQL Injectionthông tin

tiêu đềDromara MaxKey 3.5.13 SQL Injection
Mô tảMaxKey 的"账户策略 / 角色策略 / 组策略"模块将用户可控的 filters 与 orgIdsList 字段以 MyBatis 原始插值 ${} 拼接到 SQL。虽然 StrUtils.checkSqlInjection() 对参数做了关键词黑名单过滤,但黑名单极不完整,可轻易绕过。 受影响 Mapper 片段(mysql / postgresql 版本均存在) AccountsMapper.xml: <select id="queryUserNotInStrategy" ...> SELECT ... FROM users u <where> and (${filters}) and u.departmentid in( ${orgIdsList}) </where> </select> GroupMemberMapper.xml / RoleMemberMapper.xml 存在相同模式,共计 16+ 处 ${filters} / ${orgIdsList} 原始拼接。 上层调用 AccountsServiceImpl.refreshByStrategy(): public void refreshByStrategy(AccountsStrategy strategy) { if(StringUtils.isNotBlank(strategy.getOrgIdsList())) { strategy.setOrgIdsList("'" + strategy.getOrgIdsList().replace(",", "','") + "'"); } List<UserInfo> userList = queryUserNotInStrategy(strategy); ... } 对 orgIdsList 仅做简单逗号替换,对 filters 完全未做过滤。 黑名单过滤器可绕过 StrUtils.java:491-518 的 checkSqlInjection(): private static final String SQL_REGEX = ".*([';]+|(--)+|(\\band\\b)|(\\bor\\b)).*"; 该正则: 阻止 and / or / ; / -- / ' 未阻止 UNION、SELECT、SLEEP、BENCHMARK、UPDATEXML、EXTRACTVALUE 未阻止 /* */ 注释截断 攻击者可用 UNION 注入 / 基于时间盲注。
Nguồn⚠️ https://github.com/xpp3901/CVE_APPLY/tree/main/V-M001_MaxKey_Filters_SQL_Injection
Người dùng
 xpp39 (UID 97299)
Đệ trình14/04/2026 09:55 (cách đây 6 các tháng)
Kiểm duyệt02/05/2026 22:13 (19 days later)
Trạng tháiđược chấp nhận
Mục VulDB360868 [Dromara MaxKey đến 3.5.13 StrUtils.java StrUtils.checkSqlInjection filtersfields Tiêm SQL]
điểm20

Do you want to use VulDB in your project?

Use the official API to access entries easily!