
CVE-2026-31816 - Bypass de autenticación de Budibase a RCE
CVE-2026-31816 es una vulnerabilidad crítica de bypass de autenticación y autorización que afecta a Budibase.
La vulnerabilidad se encuentra en el middleware de autorización del lado del servidor responsable de proteger los endpoints de la API. Budibase intenta identificar endpoints de webhook legítimos con una expresión regular no anclada y evalúa dicha expresión contra ctx.request.url de Koa.
Debido a que ctx.request.url contiene la cadena de consulta, un atacante puede inyectar una ruta con apariencia de webhook en el componente de consulta de una solicitud de API por lo demás no relacionada.
Por ejemplo:
/api/integrations?/webhooks/trigger
La solicitud no apunta realmente al endpoint de webhook. Sin embargo, la comprobación vulnerable puede interpretar /webhooks/trigger como evidencia de que la solicitud es una solicitud webhook legítima y permitir que la ejecución continúe sin los controles normales de autenticación y autorización.
NVD describe el problema como la posibilidad de que un atacante remoto completamente no autenticado acceda a endpoints de API del lado del servidor añadiendo un patrón de ruta de webhook a la URL.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-31816 |
| Vendedor | Budibase |
| Producto | Budibase |
| Versiones afectadas | <= 3.31.4 |
| Gravedad | Crítica |
| CVSS v3.1 | 9.1 |
| Vector CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| CWE | CWE-74 |
| Vector de ataque | Red |
| Privilegios requeridos | Ninguno |
| Interacción del usuario | Ninguna |
| Autenticación requerida | No |
NVD registra las versiones de Budibase hasta 3.31.4 como afectadas y asigna una puntuación CVSS 3.1 de 9.1.
La lógica vulnerable se centra en la detección de webhooks que se realiza antes de la autorización normal.
El aviso de seguridad documenta código conceptualmente 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)
}
El problema es la combinación de dos comportamientos:
ctx.request.url contiene la cadena de consulta.Eso significa que la expresión no necesita coincidir con la ruta real de la solicitud.
Una solicitud como:
/api/some/protected/endpoint?/webhooks/trigger
aún contiene la cadena:
/webhooks/trigger
dentro de la URL que se está evaluando.
El middleware de autorización trata posteriormente la solicitud como una solicitud webhook y llega al endpoint sin realizar el flujo de autorización normal.
El aviso de seguridad de Budibase identifica explícitamente esto como la falla subyacente y señala que el bypass omite la autenticación, la autorización, las comprobaciones de roles y la protección CSRF.
Se esperaría que una solicitud normal a un endpoint de API protegido pasara a través de la capa de autenticación.
Por ejemplo:
GET /api/integrations HTTP/1.1
Host: target.example
Connection: close
En cambio, se puede acceder a una instancia vulnerable con el patrón de cadena de consulta de webhook:
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: target.example
Connection: close
La parte importante es:
?/webhooks/trigger
El endpoint en sí no ha cambiado:
/api/integrations
Solo se ha modificado la cadena de consulta.
El aviso público de Budibase demuestra esta técnica exacta contra /api/integrations y varios otros endpoints del lado del servidor.
Una forma segura de verificar el bypass de autenticación en un laboratorio controlado es comparar una solicitud ordinaria con la 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
El servidor vulnerable puede procesar la segunda solicitud sin los controles de autenticación que normalmente protegerían el endpoint.
Un PoC publicado utiliza de manera similar:
/api/integrations?/webhooks/trigger
como una verificación simple de vulnerabilidad.
Lo siguiente demuestra la estructura de una solicitud de API autenticada transformada en una solicitud no autenticada al añadir el patrón 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":{}}
El aviso oficial de Budibase documenta este endpoint como una de las superficies de API afectadas.
Otros endpoints del lado del servidor documentados como alcanzables a través de la misma falla incluyen:
/api/tables
/api/datasources
/api/automations
/api/roles
/api/integrations
/api/views
/api/plugins
La observación clave es que la vulnerabilidad no está ligada a un recurso de aplicación particular. El middleware de autorización afectado se encuentra frente a un amplio conjunto de API del lado del servidor.
El bypass de autenticación puede volverse considerablemente más grave cuando se combina con una API sensible capaz de aceptar funcionalidad controlada por el atacante.
El PoC de este repositorio encadena la vulnerabilidad de la siguiente manera: