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

图片版权 华盟网
漏洞概览:一次无密码登录

图片版权 华盟网
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操作符绕过”旧密码”验证,进而修改任意账户的密码。
具体危害包括:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
FastGPT在企业内部知识库、客服系统和自动化工作流场景广泛部署,一旦被攻击者植入后门Agent,后续的供应链污染和数据外泄将难以追踪。

图片版权 华盟网
技术根因:类型安全 ≠ 运行时安全
这起漏洞的根因值得所有使用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。修复方案包括:
-
在登录端点对password字段强制类型校验,确保其始终为字符串 -
对传入MongoDB查询的参数实施Schema白名单校验 -
引入参数化查询逻辑,禁止MongoDB操作符从用户输入传入
对于尚未升级的用户,官方明确表示不存在有效的临时缓解方案,升级是唯一修复路径。
验证方法:如何确认自己是否受影响
受影响版本: FastGPT < 4.14.9.5
验证步骤:
-
查看当前FastGPT版本:访问 /api/v1/system/info端点 -
发送恶意登录请求(仅限你自己的测试环境):
curl -X POST https://your-fastgpt/api/v1/login
-H "Content-Type: application/json"
-d '{"email":"admin@your-domain.com","password":{"$ne":""}}'
-
若返回 code: 200和有效的 JWT token,说明你确实存在漏洞 -
若返回 code: 401或code: 400,说明已修复
未来趋势预测
NoSQL注入并非新鲜攻击技术,但在AI Agent平台快速迭代的背景下,这类”经典问题”正在频繁复现。原因有三:
-
AI平台优先追求功能迭代,安全审计跟不上发布节奏 -
JSON-native API设计天然扩大了注入面——每次用户输入都可能是合法的JSON对象 -
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














暂无评论内容