🔴 严重 | CVE-2026-54350 — Budibase is an open-source low-code platform. Prio...
🔴 【深度分析】严重安全漏洞:CVE-2026-54350
CVSS 评分: 严重(10.0)🔴 状态: Received 发布时间: 2026-06-26
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-54350 |
| CVSS 评分 | 10.0 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N |
| CWE 分类 | CWE-89,CWE-943 |
| 发布时间 | 2026-06-26 |
| 最后更新 | 2026-06-26 |
| 状态 | Received |
| 数据来源 | security-advisories@github.com |
好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 原始数据,为您生成一篇关于 CVE-2026-54350 的深度分析文章。
CVE-2026-54350: Budibase 未授权数据泄露与篡改漏洞深度分析
CVSS 评分: 10.0 (严重)
危害等级: 严重
攻击向量: 网络 (AV:N)
攻击复杂度: 低 (AC:L)
所需权限: 无 (PR:N)
用户交互: 无 (UI:N)
影响范围: 已变更 (S:C)
机密性影响: 高 (C:H)
完整性影响: 高 (I:H)
可用性影响: 无 (A:N)
漏洞概述
CVE-2026-54350 是一个存在于 Budibase(一个开源低代码平台)中的严重安全漏洞。该漏洞允许任何未经验证的攻击者,通过向任何已发布的 Budibase 应用发送单个 HTTP 请求,即可读取后端数据库(如 MongoDB、CouchDB、Elasticsearch、DynamoDB-PartiQL 或 REST-with-JSON-body)中的所有文档。如果构建者发布了具有 PUBLIC 角色的写入查询,攻击者还可以利用此漏洞修改该集合中的所有文档。
此漏洞的 CVSS 评分为 10.0(严重),因其攻击复杂度低、无需任何权限或用户交互,且能造成机密性和完整性的完全丧失。
受影响组件与版本
- 受影响组件: Budibase 开源低代码平台
- 受影响版本: 低于 3.39.12 的所有版本
- 修复版本: 3.39.12
漏洞原理分析
该漏洞是一个由多个安全缺陷组合而成的复杂攻击链,核心问题在于对用户输入的参数化查询处理不当,导致 JSON 注入,从而绕过查询过滤条件。
攻击链主要涉及以下几个关键环节:
参数注入点 (
enrichContext函数):
在packages/server/src/sdk/workspace/queries/queries.ts文件的enrichContext函数中(第121-138行),系统会将用户提供的参数值直接替换到查询的原始 JSON 体中。替换完成后,再对整个结果进行JSON.parse()解析。这个过程没有对用户输入中的 JSON 元字符(如双引号"、反斜杠\、花括号})进行转义或过滤。输入验证缺陷 (
validateQueryInputs函数):
在packages/server/src/api/controllers/query/index.ts文件的validateQueryInputs函数中(第61-71行),验证器仅拒绝了 Handlebars 模板标记({{和}}),但没有转义或拒绝 JSON 元字符。这意味着攻击者可以在参数值中注入合法的 JSON 语法。JSON 注入与键覆盖:
攻击者可以构造一个包含恶意 JSON 片段的参数值。例如,对于一个 MongoDB 的find查询,构建者可能设计了一个过滤条件{"name": "{{parameter}}"}。攻击者可以提供一个参数值,如"dummy", "$where": "1"。经过enrichContext替换和JSON.parse后,最终的查询对象会变成:{"name": "dummy", "$where": "1"}由于 JSON 解析器在处理重复键时,会采用最后一个键的值。攻击者可以利用此特性,注入一个
$where或$exists操作符,覆盖原有的过滤条件。例如,注入"} , "name": {"$exists": true} }可以将原始查询{"name": "..."}变为{"name": {"$exists": true}},从而匹配集合中的所有文档。数据库操作滥用:
- 数据泄露 (MongoDB
find): 在packages/server/src/integrations/mongodb.ts的第506-510行,被注入后的过滤对象会直接传递给collection.find()方法。由于过滤条件被篡改为匹配所有文档,攻击者可以获取整个集合的数据。 - 数据篡改 (MongoDB
updateMany): 对于updateMany查询(mongodb.ts第577-585行),同样的注入技术可以扩大过滤范围,使其匹配整个集合。而构建者控制的$set更新操作将作用于所有匹配的文档,导致攻击者可以修改集合中的全部数据。
- 数据泄露 (MongoDB
认证与授权绕过:
- 权限检查短路: 在
packages/server/src/middleware/authorized.ts的第141-148行,当查询的角色被设置为PUBLIC时,授权中间件会直接短路,不进行任何身份验证。 - 无 CSRF 保护: 该 API 路径没有实施跨站请求伪造(CSRF)保护。
- 公开接口:
POST /api/v2/queries/:queryId接口(packages/server/src/api/routes/query.ts第63行)接受无会话的请求,仅需要一个x-budibase-app-id头,而这个头信息可以从已发布应用的 URL 中轻易获取。
- 权限检查短路: 在
影响评估
- 攻击复杂度: 低 (AC:L)。攻击者无需特殊技能,只需构造一个包含恶意 JSON 片段的 HTTP 请求。
- 所需权限: 无 (PR:N)。攻击者无需任何账户或会话。
- 用户交互: 无 (UI:N)。攻击完全自动化,无需受害者任何操作。
- 利用条件: 攻击者需要知道一个已发布的 Budibase 应用的 URL(通常为公开信息),并且该应用包含一个配置为
PUBLIC角色的查询。对于数据泄露,只需一个PUBLIC的读取查询;对于数据篡改,则需要一个PUBLIC的写入查询。 - 潜在后果:
- 严重数据泄露: 攻击者可以窃取后端数据库中所有公开查询可访问的集合数据,包括用户信息、业务数据、配置等。
- 严重数据篡改: 如果存在公开的写入查询,攻击者可以修改、删除或破坏数据库中的全部数据,导致业务中断、数据完整性丧失。
- 权限提升: 虽然此漏洞本身不直接导致服务器控制,但泄露的敏感信息(如管理员凭证、API密钥)可能被用于进一步的攻击。
修复建议
官方补丁
- 立即升级: 将 Budibase 实例升级到 3.39.12 或更高版本。此版本修复了
enrichContext函数中的 JSON 注入问题,并对用户输入进行了更严格的转义和验证。
临时缓解措施
在无法立即升级的情况下,可以采取以下临时措施:
- 审查并移除 PUBLIC 查询: 立即审查所有已发布应用中配置为
PUBLIC角色的查询。除非绝对必要,否则应将这些查询的权限提升为App User或更高,并要求用户登录。 - 网络隔离: 将 Budibase 应用部署在内部网络或 VPN 之后,避免直接暴露在公网。
- Web 应用防火墙 (WAF) 规则: 在 WAF 中配置规则,拦截包含可疑 JSON 注入载荷的请求。例如,拦截
POST /api/v2/queries/路径下,请求体中包含$where、$exists、$gt等 MongoDB 操作符的请求。 - 监控与审计: 加强对 Budibase API 访问日志的监控,特别关注来自未认证 IP 的
POST /api/v2/queries/:queryId请求,以及返回大量数据的异常请求。
参考资料
- CVE 详情页: https://nvd.nist.gov/vuln/detail/CVE-2026-54350
- CWE-89: SQL 注入中特殊元素转义不当 (Improper Neutralization of Special Elements used in an SQL Command) - https://cwe.mitre.org/data/definitions/89.html
- CWE-943: 数据查询逻辑中特殊元素转义不当 (Improper Neutralization of Special Elements in Data Query Logic) - https://cwe.mitre.org/data/definitions/943.html
- GitHub 安全公告 (预计): 请关注 Budibase 的 GitHub 仓库中的 Security Advisories 页面,以获取官方公告和补丁详情。