Skip to main content

SurrealDB CVE-2026-121416

| EUVDEUVD-2026-115948 HIGH
Improper Access Control (CWE-284)
2026-11-03 VulnCheck GHSA-347j-rmf7-f74x
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate and submit a query
  2. Delivery
    Call denied function via method syntax (e.g. $f.put())
  3. Exploit
    MethodPart::evaluate skips capability check
  4. Execution
    Denied function executes, bypassing --deny-funcs
  5. Impact
    Read and write file bucket data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires (1) an authenticated subject able to submit queries via RPC/HTTP/WS, DEFINE FUNCTION bodies, or custom APIs (PR:L); and (2) a deployment that has actually configured --deny-funcs or the SURREAL_DENY_FUNCS environment variable as hardening - deployments with no deny rules are explicitly unaffected. On the default 3.x streaming engine all denied families are bypassable via method-style syntax; the specific file bucket read/write chain additionally requires the experimental Files feature enabled (3.3.x only). Limiting factors: authentication is mandatory, the deny-funcs configuration is non-default hardening that must already be in place for there to be any control to bypass, and the highest (file::*) impact depends on the experimental Files feature and the bucket's own PERMISSIONS (default FULL).

Impact

The input CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N, score 7.1) indicates a network-reachable, low-complexity attack that nonetheless requires authentication (PR:L) - consistent with the description stating 'authenticated users who can submit queries.' There is no CISA KEV entry and no EPSS score was supplied, so widespread or automated exploitation cannot be asserted; this is not confirmed actively exploited. Public PoC reproduction scripts (repro.sh ×4) and transcripts are attached to the GHSA advisory, so a public PoC reference exists; it is not formally labeled confirmed working exploit code but demonstrates the bypass across 10 deny families including a file::* write+read round-trip. The vuln.today decision label is 'this_week' (not act_now/emergency). The most important real-world qualifier is that risk is entirely conditional: only deployments that have configured --deny-funcs (or SURREAL_DENY_FUNCS) as hardening are affected - out-of-the-box deployments with no deny rules are explicitly not affected - so the high VC:H impact only materializes where operators relied on function denial as a security control. For those deployments the control is fully voided on the default streaming engine and partially voided on the legacy path, which is a genuine priority to patch this week rather than a paper-only high score; for deployments not using deny-funcs this is effectively non-applicable.

Exploit ScenarioDerived

On a SurrealDB 3.x deployment hardened with --deny-funcs file::* (experimental Files feature enabled), an authenticated user submits a query using method syntax such as $f.put() then $f.get() instead of the normal function form. Because MethodPart::evaluate resolves and invokes the function without a capability check, the denied function executes, letting the user write and then read back file bucket data despite the file::* denial. Public reproduction scripts and transcripts demonstrating this (and 9 other deny families) are attached to the GHSA advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 03, 2026

SurrealDB 2.0.0 through 3.3.0 does not enforce the --deny-funcs function-level security control on method-style function invocations, so an authenticated user who can submit queries can execute function families the operator explicitly denied - for example [1,2].map(...) instead of array::map(...), or $f.put()/$f.get() against a file bucket despite a file::* denial. The gap only exists on deployments that actually configure deny rules (--deny-funcs or SURREAL_DENY_FUNCS); the default 3.x streaming engine performs no capability check at all on this path, while the legacy compute-only path blocks some families and still lets others (math::abs, value::chain, array::any, array::sort::asc, type::string) through. Impact is highest when the experimental Files feature is enabled (3.3.x only) and bucket PERMISSIONS are permissive, allowing file bucket reads and writes under a deny file::* policy. There is no CISA KEV entry and no EPSS score was supplied, so active exploitation cannot be asserted; public reproduction scripts and transcripts are attached to the GHSA advisory.

RemediationAI

Upgrade to SurrealDB 3.3.1, the version in which the package is listed as fixed (rust/surrealdb < 3.3.1 vulnerable, fixed in 3.3.1); the vendor advisory at https://github.com/surrealdb/surrealdb/security/advisories/GHSA-p296-7pr4-87rr documents the fix approach of calling check_allowed_function on the fully resolved function name in MethodPart::evaluate and at the planner resolution point. Because the defect voids --deny-funcs rather than exposing a default configuration, the practical interim controls are: treat deny-funcs as non-enforcing until patched and restrict query submission to trusted subjects (any principal that can submit a query via RPC/HTTP/WS, DEFINE FUNCTION bodies or custom APIs can reach the bypass, so tightening who holds query privileges removes the prerequisite, at the cost of narrowing application access); on 3.3.x, disable the experimental Files feature and/or tighten file bucket PERMISSIONS, which default to FULL and are what ultimately bound the .get()/.put() reachability (side effect: dependent file functionality stops working); and do not treat --planner-strategy compute-only as a full workaround, since it only blocks the array::map, record::exists, string::len and file::get method forms while math::abs, value::chain, array::any, array::sort::asc and type::string still bypass under deny rules. No other vendor-released patch beyond 3.3.1 is identified in the available data.

Affected VersionsENISA

surrealdb 2.0.0 <3.3.1

Affected Packages

euvd surrealdb fix: 3.3.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

SurrealDB is a Rust-implemented multi-model database whose --deny-funcs CLI flag (also exposed as the SURREAL_DENY_FUNCS environment variable) is the documented function-level security control: once an operator denies a function family, no subject may execute it. The control is implemented as scattered checks at several call sites rather than a central dispatcher - legacy compute (expr/function.rs), streaming normal-form calls (exec/physical_expr/function/builtin.rs) and the legacy method path (fnc/mod.rs) - while the streaming engine's method path resolves the descriptor in MethodPart::evaluate (exec/parts/method.rs) and at planning time in exec/planner/idiom.rs, then calls func.invoke/invoke_async without invoking check_allowed_function. The root cause is an improper access control gap (CWE-284), with a secondary not-failing-securely aspect (CWE-636) in the legacy canonicalization layer: it converts values with kind_of() into names like 'int'/'float'/'decimal' and 'geometry<point>' while the deny mapping table is keyed on 'number' and 'geometry', so those branches never match, and method aliases such as every/some/includes/index_of/sort_asc and cross-family mappings like chain/expect/diff/patch/to_*/is_* are compared against names that are not the registered function names. In practice the deny list is matched against the canonical/normal-form function name in one invocation style but not the other, so the same capability is reachable through syntax the check never sees. The flaw has existed since method syntax and deny-funcs coexisted in 2.0.0; the newer streaming engine (default in 3.x) simply never implemented the check that the older engine partially gained.

Know when Surrealdb gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 7.1 HIGH

Authenticated query submitter gives PR:L; method-syntax call is low complexity (AC:L); C:H from reading file bucket data and I:L from writes, no availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Nov 03, 2026 - 16:17 EUVD
CVE Published
Nov 03, 2026 - 14:28 cve.org
HIGH 7.1

DescriptionCVE.org

SurrealDB 2.0.0 before 3.3.1 does not enforce --deny-funcs restrictions on method-style function calls in the streaming engine, because MethodPart::evaluate invokes resolved functions without a capability check. Authenticated users who can submit queries can run denied functions via method syntax, e.g. [1,2].map() or $f.put()/$f.get() to write and read file bucket data despite file::* denials.

Technical POC Analysis

CVE-2026-121416 (GHSA-p296-7pr4-87rr; the advisory still says "No known CVE" at publication) is CWE-284 Improper Access Control, with CWE-636 failing open as a secondary classification.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity vulnerability in SurrealDB versions 2.0.0 through 3.3.0 allows authenticated users to bypass function-level deny rules, potentially enabling unauthorized execution of restricted function families and, if the experimental Files feature is enabled with permissive bucket permissions, unauthorized file reads and writes. This undermines the product's security controls and could lead to data exposure or integrity compromise, particularly in environments where strict function restrictions are mandated. Leadership should prioritize remediation because the flaw affects a core security mechanism and may violate compliance requirements, though no active exploitation has been confirmed.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable the experimental Files feature if not required; enforce strict bucket permissions; restrict authenticated users who can submit queries to only trusted individuals; monitor query logs for unauthorized method-style function calls; consider using the legacy compute-only path if it provides additional restrictions for critical function families.

Threat Intelligence Overview

Prevalence
Low
emerging multi-model database, limited production/enterprise deployment footprint
Social Media
1
Sightings
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2025-71392 CRITICAL
9.4 Jul 18

Privilege escalation via second-order SurrealQL injection in SurrealDB before 2.0.5, 2.1.5, and 2.2.2 lets an authentica

CVE-2026-63756 CRITICAL
9.2 Jul 20

Privilege escalation in SurrealDB before v3.1.0 lets unauthenticated attackers hijack the privileges of concurrently-act

CVE-2026-121417 HIGH
8.8 Nov 03

Use-after-free in SurrealDB Core before 3.3.0 can crash or corrupt memory in Rust applications that embed the database a

CVE-2026-63760 HIGH
8.7 Jul 20

Denial of service in SurrealDB before 3.1.0 lets an unauthenticated remote attacker crash the database with a single Web

CVE-2026-63747 HIGH
8.7 Jul 20

Denial of service in SurrealDB before 3.1.0 lets an unauthenticated remote attacker crash the entire database process wi

CVE-2026-63757 HIGH
8.7 Jul 20

Session hijacking in SurrealDB before 3.1.0 lets unauthenticated attackers enumerate attached session UUIDs through the

CVE-2026-109343 HIGH
8.6 Oct 12

SurrealDB versions before 3.3.0 fail to validate a caller's authorization level when the SurrealQL USE statement switche

CVE-2026-109334 HIGH
8.6 Oct 12

Cross-tenant data access in SurrealDB before 3.3.0 allows an authenticated namespace- or database-level SYSTEM user to b

CVE-2026-63735 HIGH POC
8.6 Jul 20

Cross-tenant authorization bypass in SurrealDB before 3.2.0 lets any authenticated user reach custom API endpoints belon

CVE-2026-121419 HIGH
8.6 Nov 03

Cross-user MCP session takeover in SurrealDB 3.1.0 through 3.2.x allows an authenticated holder of even a lowest-role JW

CVE-2026-63739 HIGH
8.3 Jul 20

Arbitrary file read in SurrealDB before 3.1.5 lets an authenticated database user holding the EDITOR or OWNER role discl

CVE-2026-63763 HIGH
7.5 Jul 20

Confused-deputy privilege escalation in SurrealDB before 2.5.0 and before 3.0.0-beta.3 lets a low-privileged user (e.g.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy