Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid low-privilege token for access method
-
DeliveryCapture victim's mcp-session-id
-
ExploitSend own token with victim's session id to POST /mcp
-
ExecutionBoundSubject fingerprint collision passes check_subject
-
ImpactExecute MCP tools with victim's roles and permissions
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific deployment: SurrealDB with the MCP HTTP transport enabled and reachable (POST /mcp, built with the mcp/http features) AND a database-, namespace-, or root-level DEFINE ACCESS method of TYPE JWT or BEARER that serves more than one user. The attacker must hold (1) a valid token for that same access method - even the lowest role suffices - and (2) the victim's mcp-session-id (the very leak this defense was meant to neutralize, e.g. from HTTP logs, proxies, or shared observability). Limiting factors: deployments that authenticate MCP users via the user/password signin path are NOT affected because that path sets a per-user actor id; single-user access methods have no other victim to impersonate; and the stdio MCP transport is exempt (only the strict 'http' transport label triggers the networked subject check). The attacker cannot escalate beyond the roles/permissions the victim's session already holds. |
| Impact | This is a credible, above-average priority rather than a high-CVSS paper tiger, but its blast radius is narrowed by specific preconditions. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H, score 8.6) describes a network-reachable flaw of low complexity requiring low privileges and no user interaction, with high confidentiality and integrity impact and no availability impact - consistent with a cross-user authorization bypass that lets an attacker read and modify data. PR:L is accurate: the attacker must already hold a valid (even lowest-role) token for the same access method, so this is an authenticated privilege-escalation/lateral-movement issue, not anonymous RCE. The vuln'. today decision label is 'this_week' (not act_now/emergency), aligning with a serious-but-not-fire-drill posture. A full, self-contained reproduction script is published in the GHSA advisory and was confirmed end-to-end (7/7 checks) against the released v3.2.0 binary and the v3.3.0-nightly master build, so working exploit code is public. No EPSS score and no CISA KEV status were provided in the input; absence of KEV means there is no evidence of active exploitation, and the missing EPSS means probability-of-exploitation cannot be quantified here. The real limiter on risk is configuration specificity: only deployments exposing MCP over HTTP with a multi-user JWT/Bearer access method are affected, which is a narrow slice of all SurrealDB installs. Note a version-range discrepancy to verify: the CVE/package metadata says >= 3.1.0 < 3.3.0, while the GHSA advisory states the MCP HTTP transport is affected from >= 3.2.0 (MCP HTTP being a v3.x feature) - reconcile with the vendor before scoping. |
| Exploit ScenarioDerived | A SurrealDB instance exposes the MCP HTTP transport (POST /mcp) with a database/namespace/root JWT access method serving multiple users. A low-privilege user (e.g. viewer-role 'bob') who obtains a higher-privilege victim's mcp-session-id - leaked via HTTP logs, a proxy, or shared observability - sends his own valid token together with that session id and executes MCP tools with the victim's roles, reading or writing records his own permissions forbid. A public, end-to-end-verified PoC reproduction script exists in the GHSA advisory; because AV:N/AC:L and the attacker uses only legitimate credentials, exploitation is straightforward once the session id is known. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Cross-user MCP session takeover in SurrealDB 3.1.0 through 3.2.x allows an authenticated holder of even a lowest-role JWT or Bearer token to run MCP tools with a victim's roles and permissions by presenting that victim's mcp-session-id alongside their own valid credential. The flaw only exists when the MCP HTTP transport (POST /mcp) is exposed and the deployment uses a database-, namespace- or root-level DEFINE ACCESS method of TYPE JWT or BEARER that serves more than one user; users authenticated through the user/password signin path and the stdio MCP transport are not affected. Severity is high on paper (CVSS 8.6, C:H/I:H) but the blast radius is capped by those deployment preconditions and by the fact that the attacker cannot exceed the victim's own privileges; the vendor advisory includes a public proof-of-concept reproduction and a fix in 3.3.0, and no confirmed active exploitation or KEV listing is available at time of analysis.
RemediationAI
Upgrade to SurrealDB 3.3.0 or later, the release in which the JWT/Bearer token path is expected to derive the actor id from the token's per-user id/sub claim so that users of the same access method receive distinct BoundSubjects; consult the vendor advisory at https://github.com/surrealdb/surrealdb/security/advisories/GHSA-pgh9-49q4-hqcx for the authoritative patch details and confirm the fix on your build before relying on it. Until the upgrade is deployed, the most effective compensating control is to stop exposing POST /mcp to untrusted networks or to front it with a proxy that enforces single-identity sessions, accepting the trade-off that MCP clients must then be routed through that proxy. Alternatively, re-authenticate MCP callers through the user/password signin path, which sets a per-user actor id and is not affected, at the cost of managing per-user database credentials instead of shared JWT/Bearer issuance. Collapsing each JWT/BEARER access method to a single user removes the cross-user collision but eliminates shared-token architectures. Because exploitation requires the victim's mcp-session-id, scrub session ids from HTTP access logs, reverse-proxy logs and shared observability pipelines and restrict who can read them, and prefer the stdio transport where it is a viable integration. Rotating the JWT signing key does not remediate the collision, since the attacker's token remains valid under any key; treat any session whose mcp-session-id may have leaked as compromised and terminate it.
Affected VersionsENISA
Affected Packages
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's MCP module defines an explicit threat model in auth.rs stating that possession of an mcp-session-id alone must not let an attacker present a different credential and impersonate the original user. The enforcement is BoundSubject, a fingerprint of (session.au.level(), session.au.id()) captured at MCP initialize time and re-compared by check_subject on every subsequent request; missing or anonymous subjects are rejected, and a subject that is not equal to the bound one is rejected. For access-method authentication (DEFINE ACCESS ... TYPE JWT or TYPE BEARER), verify::token constructs the actor as Auth::new(Actor::new(de.name.to_string(), roles, Level::Database(ns, db))) - that is, the actor id is the access method name, not the per-user id/sub claim, which is retained only in session.tk. Only the user/password signin path puts a per-user name into the actor id. Consequently every user of the same access method produces a byte-identical fingerprint regardless of their token roles, the inequality branch of check_subject never fires, and the request is accepted; the HTTP factory forces the strict "http" transport label that enables this networked check, while the stdio transport is correctly exempt. Because tool execution runs against the session bound at handshake (handler(self.session())), the attacker's tool calls execute under the victim's session and permissions, and audit records attribute them to the same shared subject string (e.g. /ns:test/db:test/::api). The root cause is the CWE-269 improper privilege management class, with the advisory also categorising it as CWE-287 improper authentication: a per-session identity check that compares an identity field which is not actually per-user.
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
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
Network MCP endpoint (AV:N), low complexity once the session id is known (AC:L), requires a valid same-method token so PR:L; attacker gains victim's read/write (C:H/I:H), no availability or scope-crossing impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
SurrealDB from 3.1.0 before 3.3.0 contains an improper authentication vulnerability where the MCP BoundSubject fingerprint uses the access method name instead of per-user identity for JWT/Bearer access. Attackers with a valid low-privilege token for the same access method and a victim's mcp-session-id can hijack the session and execute MCP tools with the victim's roles and permissions.
Technical POC Analysis
CWE-269 (Improper Privilege Management), with CWE-287 (Improper Authentication) also assigned by the vendor.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
SurrealDB versions 3.1.0 to 3.2.x contain a high-severity flaw (CVE-2026-121419) that allows an authenticated attacker with minimal privileges to impersonate other users and execute MCP tools with their permissions. This requires a specific configuration: the MCP HTTP transport exposed and JWT or Bearer authentication serving multiple users. While no active exploitation has been observed, the presence of a public proof-of-concept reproduction and the potential for privilege escalation within the victim's permissions warrant immediate attention, especially for organizations relying on SurrealDB for sensitive data operations.
Apply vendor patch (upgrade to 3.3.0). If patching is not immediately possible, disable the MCP HTTP transport (POST /mcp) or restrict access to it via network controls (e.g., firewall rules, VPN), and ensure that JWT/Bearer authentication is not used for multi-user access; monitor logs for unusual session identifiers or cross-user activity.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Privilege escalation via second-order SurrealQL injection in SurrealDB before 2.0.5, 2.1.5, and 2.2.2 lets an authentica
Privilege escalation in SurrealDB before v3.1.0 lets unauthenticated attackers hijack the privileges of concurrently-act
Use-after-free in SurrealDB Core before 3.3.0 can crash or corrupt memory in Rust applications that embed the database a
Denial of service in SurrealDB before 3.1.0 lets an unauthenticated remote attacker crash the database with a single Web
Denial of service in SurrealDB before 3.1.0 lets an unauthenticated remote attacker crash the entire database process wi
Session hijacking in SurrealDB before 3.1.0 lets unauthenticated attackers enumerate attached session UUIDs through the
SurrealDB versions before 3.3.0 fail to validate a caller's authorization level when the SurrealQL USE statement switche
Cross-tenant data access in SurrealDB before 3.3.0 allows an authenticated namespace- or database-level SYSTEM user to b
Cross-tenant authorization bypass in SurrealDB before 3.2.0 lets any authenticated user reach custom API endpoints belon
Arbitrary file read in SurrealDB before 3.1.5 lets an authenticated database user holding the EDITOR or OWNER role discl
Confused-deputy privilege escalation in SurrealDB before 2.5.0 and before 3.0.0-beta.3 lets a low-privileged user (e.g.
Denial of service in SurrealDB before 3.1.5 lets an authenticated user with query-execution privileges crash the entire
EUVD-2026-115951
GHSA-hprh-85vv-3jpq
NVD
CVE.org
Exploit-DB