Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app binding GeoJSON via execute()/batch()
-
DeliverySubmit Polygon with non-array ring and large length
-
ExploitEncoder reserves uninitialized heap bytes
-
ExecutionUnwritten buffer sent and persisted to DB
-
ImpactRead back value to recover leaked heap data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the target application to serialize a GeoJSON Polygon or MultiPolygon value through the BINARY protocol via the connector's execute() or batch() APIs; the text-protocol query() path is explicitly NOT affected. The specific trigger is a malformed non-array 'ring' (e.g. an object exposing a numeric length, a string, or a number) whose length is used to size a Buffer.allocUnsafe() allocation before the type is validated, leaving reserved bytes unwritten. Limiting factors: the attacker must be able to influence the geometry value the application passes to the connector, the application must actually use binary-protocol prepared statements/batches with geometry (not plain query()), and the attacker must be able to read the persisted value back to recover the leaked heap bytes. Affected versions are those prior to 3.2.5, 3.3.4, 3.4.7, and 3.5.4. |
| Impact | The input CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N, base 7.5) presents this as a network-reachable, unauthenticated, high-confidentiality issue, but that score overstates practical ease of exploitation. No EPSS score, no CISA KEV listing, and no public exploit were provided, so exploitation status is 'no public exploit identified at time of analysis' - the GitHub commit diffs in the input are the vendor FIX, not weaponized exploit code, and must not be conflated with a POC. No SSVC decision data was supplied. The real-world risk is conditional rather than broadly wormable: the defect is a CWE-200 uninitialized-memory disclosure in the GeoJSON Polygon/MultiPolygon BINARY encoders only (the text-protocol query() path is explicitly unaffected), so it triggers only when an application serializes attacker-influenceable geometry values through execute() or batch(). The PR:N in the vector reflects that the connector itself requires no DB authentication from the attacker's perspective, but the attacker does not call the connector directly - they must get malformed geometry (a non-array ring exposing a numeric length) into the application's query path AND be able to read the resulting stored value back, which raises real-world attack complexity above the AC:L in the input. Impact, however, is genuinely serious if triggered: leaked heap bytes may contain other users' data, session material, DB credentials, or TLS key material, and may propagate to backups and replicas. Net: a real patch-worthy issue for affected deployments, but closer to a targeted/conditional disclosure than a mass-exploitable network bug; the AC:L in the supplied vector should be treated with caution. |
| Exploit ScenarioDerived | A Node.js application uses MariaDB Connector/Node.js and inserts user-supplied GeoJSON geometry into a spatial column via a prepared statement (execute()) or batch(). An attacker submits a Polygon/MultiPolygon whose ring is a non-array object carrying a large numeric length property; the encoder reserves that many uninitialized Buffer.allocUnsafe() bytes but the writing loop skips them, and the full buffer is sent to the database, persisting raw Node.js heap memory into the stored value, which the attacker then reads back. No public exploit code was identified at the time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 08, 2026
Malformed GeoJSON Polygon or MultiPolygon values cause MariaDB Connector/Node.js - every release before 3.2.5, 3.3.4, 3.4.7 and 3.5.4 - to write uninitialized Node.js heap memory into database values. When a calling application passes a non-array 'ring' (an object exposing a numeric length, a string, or a number) through the binary-protocol execute() or batch() APIs, the encoder sizes a Buffer.allocUnsafe() allocation from that ring's length but the writing loop skips the reserved bytes, so the entire buffer is sent and persisted in the database, potentially carrying other users' content, session material, database credentials or TLS key material that can then spread to backups and replicas. The published CVSS 3.1 vector (7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) treats this as a trivially reachable unauthenticated disclosure, but independent review rates attack complexity High because exploitation additionally requires the attacker to influence the geometry value the application passes to the connector, the application to actually use binary-protocol prepared statements or batches with geometry rather than the unaffected text-protocol query() path, and the ability to read the persisted value back; no public exploit code has been identified at time of analysis and there is no CISA KEV entry.
RemediationAI
Vendor-released patches: upgrade MariaDB Connector/Node.js to 3.2.5, 3.3.4, 3.4.7 or 3.5.4, choosing the fixed release on the maintenance train you already run, per the GitHub advisory GHSA-48qf-xh34-q73r and MariaDB Jira CONJS-367. Until every client, worker and container image is upgraded, validate geometry input before it reaches the connector: coerce or reject any ring that is not an Array (in particular reject objects that merely expose a numeric length, strings, numbers, null and undefined) and validate this at the API boundary where client-supplied GeoJSON is parsed - the trade-off is that any application legitimately passing loosely typed geometry will start erroring and needs a normalization layer instead. If input validation is not feasible, avoid persisting Polygon or MultiPolygon through the binary protocol: either route geometry writes through the text-protocol query() path (not affected, but it sacrifices parameterized prepared statements and reintroduces SQL-injection risk that must be handled by strict escaping) or perform geometry writes from a separate, tightly controlled service that only accepts already-normalized arrays - the trade-off there is added architectural complexity and a new trust boundary. Because leaked heap bytes are permanently written to the database, also assume prior compromise: rotate database credentials and TLS keys used by the Node.js process, audit and scrub GeoJSON/geometry columns written before the upgrade, and re-evaluate backups, binary logs and replicas for the same uninitialized data. Monitoring for connector errors or null geometry returns after applying the ring-validation change can help confirm the fix is engaged; no CISA KEV entry exists, so this should be prioritized as a data-hygiene and credential-rotation task rather than an emergency patch-under-attack scenario.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw sits in the connector's binary encoder (lib/cmd/encoder/binary-encoder.js), which serializes GeoJSON values into MariaDB's geometry wire format for prepared statements and batches. For Polygon and MultiPolygon types the encoder computed the required allocation from each ring's numeric length via Buffer.allocUnsafe() - an API that deliberately does not zero the memory it returns - before verifying that the ring was actually an array. A malformed ring that merely exposes a numeric length (for example { length: 4000 }, a 4000-character string, a number, null or undefined) caused bytes to be reserved that the subsequent writing loop never populated, and because the connector then transmitted the whole buffer through execute() or batch(), the untouched region of the Node.js heap was written into the database column. This is CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor), i.e. an information-disclosure defect rather than an injection or code-execution primitive; the leaked heap contents depend entirely on what the Node.js process had previously allocated and freed, so the severity of any single instance is environment-dependent even though the confidentiality impact is rated High. The text-protocol query() path uses a different code path and is explicitly not affected. The upstream fix adds an Array.isArray() check on each ring before space is reserved (plus null/undefined guards and GeometryCollection handling), so a non-array or malformed ring now returns null instead of emitting a partially initialized buffer; unit tests were added covering objects with length, strings, null, undefined, numbers, mixed valid/invalid rings, and GeometryCollections. The affected package is identified by the CPE cpe:2.3:a:mariadb-corporation:mariadb-connector-nodejs:*:*:*:*:*:*:*:*, which is version-wildcarded, so the precise vulnerable ranges must be taken from the advisory and the 3.2.5 / 3.3.4 / 3.4.7 / 3.5.4 release tags rather than from the CPE alone.
Know when Node.js 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
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Network-reachable with no connector auth (PR:N), but requires the app to encode attacker-influenced geometry via binary execute()/batch() and read the value back, so AC:H; confidentiality-only heap disclosure (C:H, I:N, A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
MariaDB Connector/Node.js is used to connect applications developed on Node.js to MariaDB and MySQL databases. Prior to 3.2.5, 3.3.4, 3.4.7, and 3.5.4, the GeoJSON Polygon and MultiPolygon binary encoders size a Buffer.allocUnsafe() allocation from each ring's numeric length before confirming that the ring is an array. A malformed non-array ring can therefore reserve bytes that the writing loop skips, and the connector sends the full buffer through execute() or batch(), disclosing uninitialized Node.js heap data into a database value. The persisted data can include other users' content, session material, database credentials, or TLS key material and may propagate to backups and replicas. The text-protocol query() path is not affected. This issue is fixed in versions 3.2.5, 3.3.4, 3.4.7, and 3.5.4.
Blast Radius
ecosystem impact- 4 npm packages depend on mariadb (3 direct, 1 indirect)
Ecosystem-wide dependent count for version 3.3.0.
Technical POC Analysis
Evidence basis: GitHub Security Advisory GHSA-48qf-xh34-q73r only.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
MariaDB Connector/Node.js versions before 3.2.5, 3.3.4, 3.4.7, and 3.5.4 can leak sensitive Node.js heap memory-including credentials, session material, and TLS keys-into database fields, backups, and replicas when applications process certain malformed GeoJSON inputs. This unauthenticated disclosure (CVSS 7.5 per PR:N) has no public exploit identified at time of analysis, though independent review notes exploitation requires attacker influence over the geometry value, reducing likelihood while still presenting a high-impact confidentiality risk. Leadership should care because leaked secrets can spread beyond the immediate database and compromise authentication, encryption, and backup integrity across the organization.
No vendor-released patch identified at time of analysis. Enforce application-layer validation to reject non-array 'ring' values in GeoJSON Polygon/MultiPolygon inputs; avoid passing untrusted geometry data to binary-protocol execute() or batch() APIs; restrict database user permissions; enable audit logging on database writes; monitor backups and replicas for unexpected memory-like content; and rotate credentials, session tokens, and TLS keys if exposure is suspected.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-95142
GHSA-48qf-xh34-q73r
NVD
CVE.org
EPSS
VulDB
Exploit-DB