ZeroHour

CVE-2026-81335

niche

Unauthenticated data exposure via unenforced permissions in Baserow Application Builder

CVSS 4.0
8.7 high
EPSS
<1%p36
Published
()
Modified
AI analysis

Baserow's Application Builder data-source dispatch and record-name API views (backend/src/baserow/contrib/builder/api/data_sources/views.py) are declared with a permission class that admits any caller, and DataSourceService.dispatch_data_sources runs check_multiple_permissions without raising and discards the returned denials, so the permission check result is never enforced (CWE-862). An unauthenticated attacker can call the dispatch or record-name endpoint with a data source ID; the identifiers are small integers and can be enumerated. The data source is then dispatched using the integration's own credentials, so the attacker receives the rows and fields that data source reads, a confidentiality-only impact scored 8.7 (High) in CVSS 4.0. Deployments running Application Builder data sources on Baserow versions before 2.3.1 are affected; version 2.3.1 passes raise_exception to the permission check and thereby closes the gap. No public proof-of-concept, no CISA KEV listing, and a 0.4% EPSS (36th percentile) indicate no known exploitation to date.

What to do: Upgrade Baserow to 2.3.1 or later, which passes raise_exception to the permission check so denial results are enforced. Where upgrading is not immediately possible, require authentication in front of the builder data-source API (e.g., at a reverse proxy or WAF) and inventory which Application Builder data sources could leak sensitive rows, since data source IDs are small integers an attacker can enumerate. Also review the credentials attached to integrations, because dispatch executes with the integration's own access.

Affected
Baserow (Application Builder data-source dispatch and record-name endpoints)versions prior to 2.3.1; fixed in 2.3.1
Estimated exposure
nicheunknown; plausibly no more than low thousands of instances (estimate) — Baserow is a comparatively small open-source no-code platform and the flaw additionally requires an Application Builder data source reachable without credentials, but no public install counts, market-share data, or internet-scan counts…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

Baserow dispatches an Application Builder data source without acting on the result of its permission check. The dispatch and record-name views in backend/src/baserow/contrib/builder/api/data_sources/views.py are declared with a permission class that admits any caller, so a request carrying no credential reaches the handler. DataSourceService.dispatch_data_sources in backend/src/baserow/contrib/builder/data_sources/service.py then calls check_multiple_permissions without asking it to raise, and neither stores nor examines the mapping of denials it returns, so a denied check leaves execution to continue and the data source is dispatched whatever the caller's identity. The dispatch runs with the integration's own credentials, so an unauthenticated request naming a data source receives the rows and fields that source reads. Identifiers are small integers and can be enumerated. Version 2.3.1 passes raise_exception to the same call.

Weakness
CWE-862
Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.