FineAdmin.Mvc SQL注入CVE-2026-67689
FineAdmin.Mvc 是开源 ASP.NET MVC5 通用权限后台管理系统,基于 ok-admin v2.0 前端模板重构而来,系统采用GPL-3.0开源协议。
一、基本情况
FineAdmin.Mvc 轻量化、上手简单,内置完整权限底座、数据字典、登录日志、系统配置。拿来即可开发 OA、CRM、企业管理后台。

FineAdmin.Mvc 自带分页查询、条件筛选、表格导出通用封装,精细化按钮级别权限管控,主打快速搭建带 RBAC 权限体系管理后台。
栋科技漏洞库关注到 FineAdmin.Mvc 相关版本中存在一个排序子句 SQL 注入漏洞,已被追踪为CVE-2026-67689,CVSS 3.X评分 9.8。
二、漏洞分析
CVE-2026-67689漏洞是 FineAdmin.Mvc 的分页列表接口中,field、order 参数中存在的 SQL 注入漏洞。
FineAdmin.Mvc 的分页列表接口将未经校验的排序参数拼接到 SQL ORDER BY 子句中,
远程攻击者在具备登录会话并提交恶意 field 或 order 参数时可注入数据库表达式,
造成数据库信息泄露并可能进一步影响数据机密性、完整性和可用性。
具体来说,FineAdmin.Mvc V1.0 及更早版本的 BaseService.GetListByFilter() 和 GetPageUnite() ,
直接使用 pageInfo.field 与 pageInfo.order 构造 ORDER BY,相关分页列表端点在 MySQL 后端被利用执行错误型或延时型 SQL 注入。
BaseService.GetListByFilter()、GetPageUnite() 方法直接通过 string.Format() ,
将 pageInfo.field、pageInfo.order 拼接至 SQL 的 ORDER BY 语句内,未做白名单校验与过滤净化处理。
MySQL 的 ORDER BY 子句支持表达式、子查询、函数调用,
攻击者可利用 EXTRACTVALUE()、UPDATEXML() 实现报错注入,或是借助 SLEEP() 实现时间盲注。
1、漏洞位置
文件路径:FineAdmin.Service\BaseService.cs 第 68–74 行(GetListByFilter / GetPageUnite 两处函数)
漏洞接口:GET /Permissions/User/List
2、攻击方式
远程攻击,需要拥有已登录授权会话(接口带有 [HandlerLogin] 登录校验特性)。
三、POC概念验证
1、报错注入 —— 获取数据库名称:
管理员已设置登录后刷新可查看2、预期返回结果:
{"state":"error","message":"XPATH syntax error: '~fineadmin~'"}
## Root Cause
`BaseService.cs:68-74`:
```csharp
if (!string.IsNullOrEmpty(pageInfo.field))
{
_orderBy = string.Format(" ORDER BY {0} {1}", pageInfo.field, pageInfo.order);
}
PageInfo 模型(FineAdmin.Model\PageInfo.cs)由 MVC 模型绑定器直接通过 HTTP 请求参数自动赋值。
在拼接 SQL 语句前,程序未对 field、order 字段做任何校验。
3、漏洞影响
攻击面较广,共计 5 个以上接口受此漏洞影响;
MySQL 环境下的 ORDER BY 注入相比普通字符型注入拥有更多利用手段。
4、修复方案
采用严格白名单校验机制:
private static readonly HashSet<string> AllowedSortFields = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
"Id", "Account", "RealName", "CreateTime", "UpdateTime"
};
private static readonly HashSet<string> AllowedSortOrders = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
"ASC", "DESC"
};
if (!string.IsNullOrEmpty(pageInfo.field) && AllowedSortFields.Contains(pageInfo.field)
&& AllowedSortOrders.Contains(pageInfo.order))
{
_orderBy = $" ORDER BY `{pageInfo.field}` {pageInfo.order}";
}
else
{
_orderBy = " ORDER BY CreateTime DESC";
}
四、影响范围
FineAdmin.Mvc ≤ 1.0
五、修复建议
FineAdmin.Mvc>1.0
六、参考链接
管理员已设置登录后刷新可查看