
CVE-2026-31816 - Bypass de Autenticação no Budibase para RCE
CVE-2026-31816 é uma vulnerabilidade crítica de bypass de autenticação e autorização que afeta o Budibase.
A vulnerabilidade existe no middleware de autorização no lado do servidor responsável por proteger endpoints de API. O Budibase tenta identificar endpoints legítimos de webhook com uma expressão regular não ancorada e avalia essa expressão contra o ctx.request.url do Koa.
Como o ctx.request.url contém a string de consulta, um atacante pode injetar um caminho com aparência de webhook no componente de consulta de uma requisição de API não relacionada.
Por exemplo:
/api/integrations?/webhooks/trigger
A requisição não tem como alvo real o endpoint de webhook. No entanto, a verificação vulnerável pode interpretar /webhooks/trigger como evidência de que a requisição é uma requisição legítima de webhook e permitir que a execução continue sem as verificações normais de autenticação e autorização.
A NVD descreve o problema como permitindo que um atacante remoto completamente não autenticado acesse endpoints de API no lado do servidor ao acrescentar um padrão de caminho de webhook à URL.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-31816 |
| Fornecedor | Budibase |
| Produto | Budibase |
| Versões afetadas | <= 3.31.4 |
| Severidade | Crítica |
| CVSS v3.1 | 9.1 |
| Vetor CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| CWE | CWE-74 |
| Vetor de Ataque | Rede |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhum |
| Autenticação Necessária | Não |
A NVD registra as versões do Budibase até 3.31.4 como afetadas e atribui uma pontuação CVSS 3.1 de 9.1.
A lógica vulnerável gira em torno da detecção de webhook executada antes da autorização normal.
O advisory de segurança documenta código conceitualmente equivalente a:
const WEBHOOK_ENDPOINTS = new RegExp(
[
"webhooks/trigger",
"webhooks/schema",
"webhooks/discord",
"webhooks/ms-teams"
].join("|")
)
export function isWebhookEndpoint(ctx) {
return WEBHOOK_ENDPOINTS.test(ctx.request.url)
}
O problema é a combinação de dois comportamentos:
ctx.request.url contém a string de consulta.Isso significa que a expressão não precisa corresponder ao caminho real da requisição.
Uma requisição como:
/api/some/protected/endpoint?/webhooks/trigger
ainda contém a string:
/webhooks/trigger
dentro da URL que está sendo testada.
O middleware de autorização subsequentemente trata a requisição como uma requisição de webhook e alcança o endpoint sem executar o fluxo normal de autorização.
O advisory de segurança do Budibase identifica explicitamente isso como a falha subjacente e observa que o bypass ignora autenticação, autorização, verificações de papel e proteção CSRF.
Uma requisição normal a um endpoint de API protegido deveria passar pela camada de autenticação.
Por exemplo:
GET /api/integrations HTTP/1.1
Host: target.example
Connection: close
Em vez disso, é possível alcançar uma instância vulnerável com o padrão de string de consulta de webhook:
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: target.example
Connection: close
A parte importante é:
?/webhooks/trigger
O endpoint em si não mudou:
/api/integrations
Apenas a string de consulta foi modificada.
O advisory público do Budibase demonstra exatamente essa técnica contra /api/integrations e vários outros endpoints no lado do servidor.
Uma forma segura de verificar o bypass de autenticação em um laboratório controlado é comparar uma requisição comum com a variante de consulta de webhook.
GET /api/integrations HTTP/1.1
Host: 127.0.0.1:10000
Connection: close
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Connection: close
O servidor vulnerável pode processar a segunda requisição sem as verificações de autenticação que normalmente protegeriam o endpoint.
Um PoC publicado utiliza de forma semelhante:
/api/integrations?/webhooks/trigger
como uma verificação simples de vulnerabilidade.
O exemplo a seguir demonstra a estrutura de uma requisição de API autenticada sendo transformada em uma requisição não autenticada ao adicionar o padrão de webhook.
POST /api/ta_users/search?/webhooks/trigger HTTP/1.1
Host: 127.0.0.1:10000
Content-Type: application/json
x-budibase-app-id: <TARGET_WORKSPACE_ID>
Connection: close
Content-Length: 12
{"query":{}}
O advisory oficial do Budibase documenta esse endpoint como uma das superfícies de API afetadas.
Outros endpoints no lado do servidor documentados como alcançáveis pela mesma falha incluem:
/api/tables
/api/datasources
/api/automations
/api/roles
/api/integrations
/api/views
/api/plugins
O ponto principal é que a vulnerabilidade não está vinculada a um recurso específico do aplicativo. O middleware de autorização afetado fica diante de um amplo conjunto de APIs no lado do servidor.
O bypass de autenticação pode se tornar consideravelmente mais grave quando combinado com uma API sensível capaz de aceitar funcionalidade controlada pelo atacante.
O PoC neste repositório encadeia a vulnerabilidade da seguinte forma: