
CVE-2026-31816 - Bypass dell'autenticazione Budibase a RCE
CVE-2026-31816 è una vulnerabilità critica di bypass dell'autenticazione e dell'autorizzazione che interessa Budibase.
La vulnerabilità risiede nel middleware di autorizzazione lato server responsabile della protezione degli endpoint API. Budibase tenta di identificare gli endpoint webhook legittimi con un'espressione regolare non ancorata e valuta tale espressione su ctx.request.url di Koa.
Poiché ctx.request.url contiene la query string, un attaccante può iniettare un percorso simile a un webhook nel componente di query di una richiesta API altrimenti non correlata.
Ad esempio:
/api/integrations?/webhooks/trigger
La richiesta non ha in realtà come target l'endpoint webhook. Tuttavia, il controllo vulnerabile può interpretare /webhooks/trigger come prova che la richiesta sia una legittima richiesta webhook e consentire l'esecuzione senza i normali controlli di autenticazione e autorizzazione.
NVD descrive il problema come la possibilità per un attaccante remoto completamente non autenticato di accedere agli endpoint API lato server aggiungendo un pattern di percorso webhook all'URL.
| Campo | Valore |
|---|---|
| CVE | CVE-2026-31816 |
| Vendor | Budibase |
| Product | Budibase |
| Versioni interessate | <= 3.31.4 |
| Gravità | Critica |
| CVSS v3.1 | 9.1 |
| Vettore CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| CWE | CWE-74 |
| Vettore di attacco | Rete |
| Privilegi richiesti | Nessuno |
| Interazione utente | Nessuna |
| Autenticazione richiesta | No |
NVD registra come interessate le versioni di Budibase fino alla 3.31.4 e assegna un punteggio CVSS 3.1 di 9.1.
La logica vulnerabile è incentrata sul rilevamento dei webhook eseguito prima della normale autorizzazione.
Il bollettino di sicurezza documenta un codice concettualmente 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)
}
Il problema è la combinazione di due comportamenti:
ctx.request.url contiene la query string.Ciò significa che l'espressione non deve necessariamente corrispondere al percorso effettivo della richiesta.
Una richiesta come:
/api/some/protected/endpoint?/webhooks/trigger
contiene comunque la stringa:
/webhooks/trigger
all'interno dell'URL testato.
Il middleware di autorizzazione successivamente tratta la richiesta come una richiesta webhook e raggiunge l'endpoint senza eseguire il normale flusso di autorizzazione.
Il bollettino di sicurezza di Budibase identifica esplicitamente questo come il difetto sottostante e osserva che il bypass salta autenticazione, autorizzazione, controlli sui ruoli e protezione CSRF.
Una richiesta normale a un endpoint API protetto dovrebbe normalmente passare attraverso il livello di autenticazione.
Ad esempio:
GET /api/integrations HTTP/1.1
Host: target.example
Connection: close
Un'istanza vulnerabile può invece essere raggiunta con il pattern webhook nella query string:
GET /api/integrations?/webhooks/trigger HTTP/1.1
Host: target.example
Connection: close
La parte importante è:
?/webhooks/trigger
L'endpoint stesso non è cambiato:
/api/integrations
È stata modificata solo la query string.
Il bollettino pubblico di Budibase dimostra questa tecnica esatta su /api/integrations e su molti altri endpoint lato server.
Un modo sicuro per verificare il bypass dell'autenticazione in un laboratorio controllato è confrontare una richiesta ordinaria con la variante con query 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
Il server vulnerabile può elaborare la seconda richiesta senza i controlli di autenticazione che normalmente proteggono l'endpoint.
Un PoC pubblicato utilizza allo stesso modo:
/api/integrations?/webhooks/trigger
come semplice verifica della vulnerabilità.
Quanto segue dimostra la struttura di una richiesta API autenticata trasformata in una richiesta non autenticata aggiungendo il pattern 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":{}}
Il bollettino ufficiale di Budibase documenta questo endpoint come una delle superfici API interessate.
Altri endpoint lato server documentati come raggiungibili tramite lo stesso difetto includono:
/api/tables
/api/datasources
/api/automations
/api/roles
/api/integrations
/api/views
/api/plugins
L'osservazione chiave è che la vulnerabilità non è legata a una particolare risorsa applicativa. Il middleware di autorizzazione interessato si trova davanti a un ampio insieme di API lato server.
Il bypass dell'autenticazione può diventare notevolmente più grave se combinato con un'API sensibile in grado di accettare funzionalità controllate dall'attaccante.
Il PoC in questo repository combina la vulnerabilità come segue: