Skip to main content

SurrealDB CVE-2026-102876

| EUVDEUVD-2026-89411 HIGH
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-09-29 disclosure@vulncheck.com GHSA-xjq6-rqgg-x5j7
8.6
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Obtain valid credentials for own tenant
  2. Delivery
    Craft HTTP /sql request with foreign Surreal-NS/Surreal-DB headers
  3. Exploit
    Bypass missing can_access_ns_db check in check_auth
  4. Execution
    Session bound to victim namespace/database
  5. Impact
    Read, create and modify cross-tenant records

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Requires the SurrealDB HTTP interface exposed and a valid Database-level or Namespace-level account (PR:L) - the attacker must already authenticate as some tenant user. Exploitation is meaningful only in multi-tenant deployments where more than one namespace/database shares the instance, so a foreign tenant exists to pivot into. The technique abuses the split between the Surreal-Auth-NS/Surreal-Auth-DB (verified) and Surreal-NS/Surreal-DB (context-selecting) headers on HTTP requests. Limiting factors: Root and anonymous (Level::No) principals are unaffected because they are already unrestricted by can_access_ns_db, and the missing check only mattered once both a namespace and database were selected. No user interaction is needed and no non-default configuration is required beyond running a shared multi-tenant instance on versions before 3.3.0.

Impact

This is a genuine, credible priority rather than an inflated high-CVSS score. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N, VC:H/VI:H/VA:N) is internally consistent with the description and confirmed by the fix commit: a network-reachable HTTP endpoint, low complexity, requires only low privileges (a valid credential for one tenant), no user interaction, and yields high confidentiality and integrity impact with no availability impact. CWE-639 (authorization bypass through a user-controlled key) matches exactly - check_auth() authenticates against the Surreal-Auth-NS/Surreal-Auth-DB headers but builds the session context from the separate, attacker-controlled Surreal-NS/Surreal-DB headers without an access check. No EPSS score, no CISA KEV listing, and no public POC were provided, so exploitation status is: no public exploit identified at time of analysis. However, the vulnerability is trivially reproducible (the fix's own regression tests demonstrate the header-pivot with plain HTTP requests), and any competent attacker with a single tenant account could reconstruct it, so the absence of a published POC should not lower urgency for multi-tenant operators. Note the tag says 'Authentication Bypass' but the attacker is in fact authenticated (PR:L) - this is an authorization / cross-tenant access-control bypass, so the tag is imprecise.

Exploit ScenarioDerived

In a shared multi-tenant SurrealDB deployment, an attacker who legitimately holds Database- or Namespace-level credentials for their own tenant sends an HTTP /sql request presenting their real credentials in the Surreal-Auth-NS/Surreal-Auth-DB headers while setting Surreal-NS/Surreal-DB to a victim tenant's namespace and database. The session is built against the attacker-chosen context without an access check, so queries execute against the foreign tenant and can read, create, and modify its records. No public POC is provided, but the vendor's regression tests reproduce the pivot with ordinary HTTP requests.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 29, 2026

Cross-tenant data access in SurrealDB before 3.3.0 allows a user holding a valid Database- or Namespace-level account to read, create, and modify records in a different tenant's namespace or database on the same instance. The flaw lies in HTTP session construction: check_auth() validates Basic credentials against the Surreal-Auth-NS/Surreal-Auth-DB headers but then builds the session from the separately supplied Surreal-NS/Surreal-DB headers without verifying that the authenticated principal may access that context, so an attacker simply points the context headers at a foreign tenant. Exploitation requires remote access to the SurrealDB HTTP interface plus an already-valid low-privilege tenant login (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N, 8.6 on CVSS 4.0); no public exploit code has been identified at time of analysis, but the impact is high in any shared multi-tenant deployment and is fully resolved by upgrading to 3.3.0.

RemediationAI

Vendor-released patch: upgrade to SurrealDB 3.3.0, which contains upstream commit 5000e233b4a8b96689c82715c172061dcf711d31 enforcing the can_access_ns_db() check on the Surreal-NS/Surreal-DB context headers; consult GHSA-vx2p-7hhm-wv62 and the v3.3.0 release notes before rolling out. If immediate upgrade is not possible, the highest-value compensating control is to stop sharing a single instance across mutually untrusted tenants - deploy one SurrealDB instance (or at minimum one namespace with no separate tenant databases) per trust boundary, which removes the cross-tenant pivot target entirely but increases operational and resource overhead. Because exploitation requires a valid Database- or Namespace-level login, rotate credentials and audit existing tenant accounts for unexpected scope, and treat any recent possession of a low-privilege tenant credential as a potential compromise: review access logs on the HTTP endpoint for sessions whose Surreal-Auth-NS/Surreal-Auth-DB differs from Surreal-NS/Surreal-DB. Restricting network access to the HTTP listener (default port 8000) to trusted clients, and disabling anonymous/guest access, reduces the attack surface but does not fix the boundary logic and offers no protection against a legitimate but malicious tenant - note that root and anonymous principals are unaffected by the missing check because they are already unrestricted. After upgrading, validation can be performed by confirming that cross-tenant header requests now return HTTP 401, as asserted by the upstream regression test.

Affected VersionsENISA

surrealdb 0 <3.3.0

Affected Packages

euvd surrealdb fix: 3.3.0

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 multi-model database whose namespace/database hierarchy provides logical tenant isolation, and the HTTP API accepts per-request headers that select the session context. Source review of the fix commit 5000e233b4a8b96689c82715c172061dcf711d31 (file surrealdb/server/src/ntw/auth.rs at tag v3.2.4) shows the root cause precisely: Basic authentication verifies the supplied credentials against the Surreal-Auth-NS and Surreal-Auth-DB headers, and a bearer token carries its own baked-in namespace/database, but the resulting Session is then constructed using the independent Surreal-NS and Surreal-DB headers without any call to can_access_ns_db(). This is CWE-639 (Authorization Bypass Through User-Controlled Key): the namespace/database selector in the request headers is an attacker-controlled key that the authorization decision never checks, producing an IDOR-style horizontal privilege escalation across tenants. The patch adds a guard that, once both a namespace and a database are selected, rejects the request unless au.can_access_ns_db(ns, db) succeeds. Root principals and anonymous (Level::No) sessions are deliberately exempt because they are already unrestricted by can_access_ns_db, and the check only becomes relevant when both context values are supplied - consistent with regression tests added in tests/http_integration.rs covering cross-database pivots, cross-namespace pivots, legitimate same-tenant access (HTTP 200), and root context selection.

Know when Rust 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 8.6 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 8.1 HIGH

Network HTTP endpoint (AV:N), trivial header manipulation (AC:L), requires a valid tenant credential (PR:L), no interaction; high confidentiality and integrity from cross-tenant read/write, no availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/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
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 29, 2026 - 21:04 EUVD
CVE Published
Sep 29, 2026 - 20:17 cve.org
HIGH 8.6

DescriptionCVE.org

SurrealDB before 3.3.0 contains an authorization bypass in HTTP session construction where check_auth() verifies credentials against Surreal-Auth-NS and Surreal-Auth-DB headers but constructs sessions using Surreal-NS and Surreal-DB headers without validating access permissions. Attackers can authenticate as a user from one tenant while selecting another tenant's namespace and database to read, create, and modify records across tenant boundaries.

Technical POC Analysis

Evidence base: GitHub advisory GHSA-vx2p-7hhm-wv62 plus the four fix commit subjects it lists.

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

SurrealDB, a multi-model database, contains a high-severity cross-tenant data access vulnerability (CVE-2026-102876) that allows any authenticated low-privilege tenant user to read, create, and modify records in other tenants' namespaces or databases on the same instance. This flaw breaks the fundamental security boundary in shared deployments, potentially exposing sensitive customer data, violating data isolation guarantees, and leading to regulatory and reputational damage. Organizations using SurrealDB in multi-tenant or shared environments should prioritize remediation by upgrading to version 3.3.0.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
popular open-source multi-model database, modest but growing production footprint
Data Quality
5 sources
Confidence: Medium

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 0.3%
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

43
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +43
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.

More in Rust

View all
CVE-2024-3566 CRITICAL POC
9.8 Apr 10

Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH

CVE-2021-31162 CRITICAL POC
9.8 Apr 14

In the standard library in Rust before 1.52.0, a double free can occur in the Vec::from_iter function if freeing the ele

CVE-2021-28879 CRITICAL POC
9.8 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove

CVE-2026-58491 CRITICAL POC
9.3 Sep 21

Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti

CVE-2021-29922 CRITICAL POC
9.1 Aug 07

library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni

CVE-2026-77620 HIGH POC
8.7 Sep 22

Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem

CVE-2019-12083 HIGH POC
8.1 May 13

The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c

CVE-2021-28878 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo

CVE-2021-28875 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe c

CVE-2019-16760 HIGH POC
7.5 Sep 30

Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration

CVE-2024-24576 CRITICAL POC
10.0 Apr 09

Rust is a programming language. Rated critical severity (CVSS 10.0), this vulnerability is remotely exploitable, no auth

CVE-2018-1000810 CRITICAL
9.8 Oct 08

The Rust Programming Language Standard Library version 1.29.0, 1.28.0, 1.27.2, 1.27.1, 127.0, 126.2, 126.1, 126.0 contai

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