Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as database Owner
-
DeliveryDefine JWT/record access with portless JWKS URL
-
ExploitTrigger server-side JWKS preflight fetch
-
ExecutionBypass port-specific deny-net rule
-
ImpactBlind GET reaches explicitly denied internal service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated attacker with database Owner privileges (CVSS PR:H) on SurrealDB 3.1.0 through before 3.3.0. The attacker must be able to configure a JWT or record access method and set its JWKS URL to a target that uses an implicit HTTP/HTTPS default port (port 80 or 443 omitted from the URL). Exploitation is only meaningful where the process operator has defined port-specific deny-net rules such as deny-net 127.0.0.1:80 or deny-net internal.example:443 - the bug is that these specific-port rules fail to match when the port is implicit. Limiting factors: the response is blind (parsed only as JWKS, no body returned to the attacker), only reachability/timing/parse-success inference is possible, no confidentiality disclosure beyond that, no integrity or availability impact, and rules that use non-default explicit ports (e.g. :8080) are unaffected and still enforced. |
| Impact | This is a genuine but bounded issue, best characterized as a medium-severity, authenticated SSRF rather than an urgent emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N, base 5.1) shows the key gating factor is PR:H: exploitation requires an attacker who already holds database Owner privileges, so this is a privilege-boundary / network-policy-bypass flaw, not a pre-auth internet-facing one. The vuln.today decision label is 'this_month' (not act_now/emergency), consistent with the moderate score. No EPSS score, no CISA KEV listing, and no SSVC automatable/technical-impact fields were provided in the input, so exploitation-probability and automation signals are UNKNOWN rather than low - they are simply absent and should not be read as reassurance. Impact is deliberately constrained: the vendor states the response is blind and parsed only as JWKS, yielding internal host/service reachability, timing, and JWKS-parse-success inference (hence VC:L and the scope/subsequent-system signal SC:L), not data theft or code execution. There is no conflict between the vector and the description; both agree on authenticated, network-triggered, blind, low-impact SSRF. Net: a legitimate defense-in-depth bypass worth patching on a normal cycle, elevated mainly where the Owner role is shared, delegated, or multi-tenant. |
| Exploit ScenarioDerived | A user holding database Owner rights in a shared or multi-tenant SurrealDB instance (3.1.0 up to before 3.3.0) defines a JWT or record access method whose JWKS URL points at an internal service using an implicit default port - e.g. http://127.0.0.1/jwks.json - that the operator explicitly blocked with a rule like deny-net 127.0.0.1:80. Because the port check drops the implicit default port, SurrealDB issues a server-side GET to the denied endpoint, letting the Owner probe internal reachability, timing, and JWKS-parse success across the network-policy boundary. The GHSA advisory includes a reproduction/canary test demonstrating the bypass; it is a proof-of-concept reference, not verified as weaponized exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
SurrealDB 3.1.0 through versions before 3.3.0 lets a database Owner bypass operator-defined port-specific deny-net rules and reach explicitly denied internal services, because the JWKS fetch path resolves URL ports with Url::port(), which returns None when an HTTP or HTTPS URL relies on the implicit default port. An attacker who can configure a JWT or record access method simply supplies a JWKS URL such as http://127.0.0.1/jwks.json (no :80) so that a rule like deny-net 127.0.0.1:80 receives a host-only target and no longer matches, producing a blind server-side GET against the denied endpoint. Exploitation requires authenticated Owner privileges (CVSS PR:H) and is only meaningful where port-specific deny rules are in place; the response is blind and parsed only as JWKS, so impact is limited to reachability, timing and parse-success inference with no integrity or availability effect. Scoring is medium (CVSS 4.0 base 5.1; internally assessed CVSS 3.1 AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:N/A:N), no public exploit code was identified at time of analysis although the vendor advisory includes a full reproduction test, and the issue is prioritised as this-month rather than emergency.
RemediationAI
Vendor-released patch: upgrade to SurrealDB 3.3.0, which resolves the vulnerable range >= 3.1.0, < 3.3.0; the upstream fix replaces Url::port() with port_or_known_default() in both the initial JWKS URL check in check_capabilities_url() and the JWKS redirect policy, a two-line change that makes the vendor's end-to-end canary report result_ok=false and canary_hit=false, and the advisory notes regression tests for implicit port 80 and 443 under matching port-specific deny rules should accompany it (see https://github.com/surrealdb/surrealdb/security/advisories/GHSA-h3mp-7wcg-p6vj). If upgrading immediately is not possible, the actionable compensating control is to remove reliance on port-specific deny-net entries for JWKS-reachable hosts and instead deny the host across all ports (a host-only deny-net rule for the same internal address), accepting the trade-off that this blocks legitimate access to every port on that host rather than only the intended service; note that rules using explicit non-default ports such as :8080 are unaffected and continue to be enforced, so they need no change. Operators should also restrict who holds Owner privileges and audit existing JWT and record access methods for JWKS URLs pointing at internal addresses on ports 80 or 443, since those are the exact configurations that exercise the bypass. Because no public exploit code was identified, remediation can proceed on a this-month cadence rather than as an emergency, but the patch should still be scheduled promptly for any instance where untrusted parties can obtain Owner access.
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 is a Rust-implemented multi-model database whose IAM layer supports JWKS-backed JWT and record access methods, fetching key material server-side with the reqwest HTTP client. This is a CWE-918 server-side request forgery rooted in Rust url crate semantics: Url::port() returns None for URLs that use a scheme's implicit default port, while port_or_known_default() returns 80 or 443. The JWKS preflight in check_capabilities_url() (surrealdb/core/src/iam/jwks.rs) builds the capability-matching target as host[:port] from url_parsed.port(), and the JWKS redirect policy repeats the identical operation with attempt.url().port(); for implicit default ports the resulting NetTarget therefore carries no port and cannot equal a NetTarget::Host(host, Some(port)) deny rule, so deny-net entries such as 127.0.0.1:80 or internal.example:443 silently fail to match. The shared DNS resolver cannot recover the decision because reqwest hands it only a DNS name and it then checks host-only and IP-only targets, and the general protected HTTP client in the same codebase already avoids the flaw by using url.port_or_known_default(). The issue survived the earlier v3.2.0 JWKS DNS and redirect hardening and is described by the vendor as a JWKS-path sibling of a prior port-specific redirect policy flaw; explicit non-default ports such as :8080 remain present in the URL and are still correctly enforced as a positive control. The trigger confirmed by the advisory is configuration of a JWKS URL on a default port matching a port-specific deny rule, with the response remaining blind, parsed only as JWKS.
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:H/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N
Network-triggered but requires database Owner (PR:H); low AC; the fetch crosses a network-policy boundary to another system (S:C) yielding only blind inference (C:L), with no integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
SurrealDB from 3.1.0 before 3.3.0 contains a server-side request forgery vulnerability that allows database Owners to bypass port-specific deny-net rules by using JWKS URLs with implicit default ports. Attackers can configure a JWT or record access method whose JWKS URL omits port 80 or 443, causing blind GET requests to explicitly denied internal services.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
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
Cross-user MCP session takeover in SurrealDB 3.1.0 through 3.2.x allows an authenticated holder of even a lowest-role JW
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.
EUVD-2026-115954
GHSA-7wm7-v445-mpw3
NVD
CVE.org
Exploit-DB