🔴 【深度分析】严重安全漏洞: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 注入,从而绕过查询过滤条件。

攻击链主要涉及以下几个关键环节:

  1. 参数注入点 (enrichContext 函数):
    在 packages/server/src/sdk/workspace/queries/queries.ts 文件的 enrichContext 函数中(第121-138行),系统会将用户提供的参数值直接替换到查询的原始 JSON 体中。替换完成后,再对整个结果进行 JSON.parse() 解析。这个过程没有对用户输入中的 JSON 元字符(如双引号 "、反斜杠 \、花括号 })进行转义或过滤。

  2. 输入验证缺陷 (validateQueryInputs 函数):
    在 packages/server/src/api/controllers/query/index.ts 文件的 validateQueryInputs 函数中(第61-71行),验证器仅拒绝了 Handlebars 模板标记({{ 和 }}),但没有转义或拒绝 JSON 元字符。这意味着攻击者可以在参数值中注入合法的 JSON 语法。

  3. 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}},从而匹配集合中的所有文档。

  4. 数据库操作滥用:

    • 数据泄露 (MongoDB find): 在 packages/server/src/integrations/mongodb.ts 的第506-510行,被注入后的过滤对象会直接传递给 collection.find() 方法。由于过滤条件被篡改为匹配所有文档,攻击者可以获取整个集合的数据。
    • 数据篡改 (MongoDB updateMany): 对于 updateMany 查询(mongodb.ts 第577-585行),同样的注入技术可以扩大过滤范围,使其匹配整个集合。而构建者控制的 $set 更新操作将作用于所有匹配的文档,导致攻击者可以修改集合中的全部数据。
  5. 认证与授权绕过:

    • 权限检查短路: 在 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 注入问题,并对用户输入进行了更严格的转义和验证。

临时缓解措施

在无法立即升级的情况下,可以采取以下临时措施:

  1. 审查并移除 PUBLIC 查询: 立即审查所有已发布应用中配置为 PUBLIC 角色的查询。除非绝对必要,否则应将这些查询的权限提升为 App User 或更高,并要求用户登录。
  2. 网络隔离: 将 Budibase 应用部署在内部网络或 VPN 之后,避免直接暴露在公网。
  3. Web 应用防火墙 (WAF) 规则: 在 WAF 中配置规则,拦截包含可疑 JSON 注入载荷的请求。例如,拦截 POST /api/v2/queries/ 路径下,请求体中包含 $where、$exists、$gt 等 MongoDB 操作符的请求。
  4. 监控与审计: 加强对 Budibase API 访问日志的监控,特别关注来自未认证 IP 的 POST /api/v2/queries/:queryId 请求,以及返回大量数据的异常请求。

参考资料