Skip to main content
Vulnerability Database/CVE-2026-107382

CVE-2026-107382: MariaDB Connector/Node.js DOS Vulnerability

CVE-2026-107382 is a denial of service flaw in MariaDB Connector/Node.js affecting TLS connections with Ed25519 authentication. The vulnerability causes client process termination under specific configurations. This post covers technical details, affected versions, impact, and mitigation steps.

Published:

CVE-2026-107382 Overview

CVE-2026-107382 is a denial-of-service vulnerability in the MariaDB Connector/Node.js client library. The flaw exists in versions 3.3.0 through 3.5.3 and resides in the zero-configuration TLS fingerprint-validation path. The Ed25519PasswordAuth.hash() function references a seed identifier that is not in scope, causing a synchronous ReferenceError to escape the socket data handler. Under default Node.js uncaught-exception behavior, the client process terminates. A legitimate server, malicious server, or network attacker presenting a self-signed certificate can trigger this condition when client_ed25519 is negotiated as the authentication plugin. The issue is tracked under [CWE-248] (Uncaught Exception) and fixed in version 3.5.4.

Critical Impact

Client processes using MariaDB Connector/Node.js terminate when the vulnerable authentication path is reached, causing application-level denial of service.

Affected Products

  • MariaDB Connector/Node.js versions 3.3.0 through 3.5.3
  • Node.js applications connecting to MariaDB/MySQL databases over TCP with TLS enabled
  • Deployments using client_ed25519 authentication plugin without a configured ssl.ca

Discovery Timeline

  • 2026-10-08 - CVE-2026-107382 published to the National Vulnerability Database
  • 2026-10-08 - Last updated in NVD database

Technical Details for CVE-2026-107382

Vulnerability Analysis

The vulnerability resides in lib/cmd/handshake/auth/ed25519-password-auth.js within the MariaDB Connector/Node.js library. During zero-configuration TLS fingerprint validation, the client invokes Ed25519PasswordAuth.hash() through Authentication.validateFingerPrint. The hash() function references a seed variable that is not available in its lexical scope. The reference triggers a synchronous ReferenceError inside the socket data handler. Node.js propagates the uncaught exception to the top of the event loop, which terminates the process under default behavior. This classifies as [CWE-248] Uncaught Exception.

Root Cause

The root cause is a missing identifier binding in the Ed25519 signing routine. The refactored code expected a seed value to be in scope when computing the signed message, but the zero-configuration TLS path called hash() without providing it. The patch restructures the function to derive the private scalar through a dedicated privateScalar(password) helper and reorganizes variable declarations so required inputs are available in scope.

Attack Vector

Exploitation requires a specific set of preconditions: a MariaDB server reached over TCP, TLS enabled with ssl: true or an ssl object where rejectUnauthorized is not false, a password set, no ssl.ca configured, and the server negotiating client_ed25519 as the authentication plugin. When these conditions align, any party presenting a self-signed certificate — a legitimate server, a malicious server, or a network attacker performing a man-in-the-middle attack — can trigger the ReferenceError. Configurations using a provided CA, rejectUnauthorized: false, a different authentication plugin, or a Unix socket do not reach the vulnerable path.

javascript
     if (!password) return Buffer.alloc(0);
 
     let i, j;
-    let p = [gf(), gf(), gf(), gf()];
+    const p = [gf(), gf(), gf(), gf()];
     const signedMsg = Buffer.alloc(96);
-    const bytePwd = Buffer.from(password);
 
-    // Ed25519 signing per RFC 8032: SHA-512 of the password derives the private scalar
-    // (clamped below). Protocol-mandated, not password-at-rest storage, so a slow KDF
-    // (bcrypt/scrypt/argon2) does not apply.
-    let hash = Crypto.createHash('sha512');
-    // codeql[js/insufficient-password-hash]
-    const d = hash.update(bytePwd).digest();
-    d[0] &= 248;
-    d[31] &= 127;
-    d[31] |= 64;
+    const d = privateScalar(password);
 
     for (i = 0; i < 32; i++) signedMsg[64 + i] = seed[i];
     for (i = 0; i < 32; i++) signedMsg[32 + i] = d[32 + i];
 
-    hash = Crypto.createHash('sha512');
+    let hash = Crypto.createHash('sha512');
     const r = hash.update(signedMsg.subarray(32, 96)).digest();

Source: GitHub Commit 784ca3d. The patch refactors scalar derivation into privateScalar() and corrects the scope so the signing routine executes without ReferenceError.

Detection Methods for CVE-2026-107382

Indicators of Compromise

  • Unexpected Node.js process termination logs referencing ReferenceError: seed is not defined originating from ed25519-password-auth.js
  • Repeated application restarts or crash-loop behavior following outbound TLS connections to MariaDB on TCP port 3306
  • TLS handshake traces showing self-signed certificates presented by hosts negotiating the client_ed25519 authentication plugin

Detection Strategies

  • Inventory Node.js applications and parse package-lock.json or yarn.lock for mariadb dependency versions between 3.3.0 and 3.5.3
  • Monitor process supervisors (systemd, PM2, Kubernetes) for abnormal exit codes from applications that connect to MariaDB over TLS
  • Capture and review stderr output for stack traces referencing Authentication.validateFingerPrint and Ed25519PasswordAuth.hash

Monitoring Recommendations

  • Alert on Node.js uncaught-exception events correlated with outbound connections to database endpoints
  • Baseline the authentication plugins negotiated by MariaDB clients and flag unexpected client_ed25519 negotiations
  • Track TLS certificate changes on database hosts to detect substitution with self-signed certificates that could trigger the vulnerable path

How to Mitigate CVE-2026-107382

Immediate Actions Required

  • Upgrade MariaDB Connector/Node.js to version 3.5.4 or later across all affected applications
  • Audit connection strings and configurations for use of ssl: true without a configured ssl.ca
  • Validate that database servers present certificates issued by a trusted CA pinned via ssl.ca

Patch Information

The fix is available in MariaDB Connector/Node.js version 3.5.4. Refer to the GitHub Release 3.5.4, the GitHub Security Advisory GHSA-cx2f-j9fh-8g68, and MariaDB JIRA Issue CONJS-356 for additional detail.

Workarounds

  • Configure an explicit ssl.ca with the trusted certificate authority so the zero-configuration fingerprint path is not executed
  • Switch to a non-Ed25519 authentication plugin such as mysql_native_password on the server side
  • Use a Unix socket connection instead of TCP where the client and server reside on the same host
bash
# Upgrade MariaDB Connector/Node.js to the patched release
npm install mariadb@3.5.4

# Example connection configuration with explicit CA (not the vulnerable path)
# const conn = await mariadb.createConnection({
#   host: 'db.example.com',
#   user: 'app',
#   password: process.env.DB_PASSWORD,
#   ssl: { ca: fs.readFileSync('/etc/ssl/certs/mariadb-ca.pem') }
# });

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.