Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft DB with %_node WITHOUT ROWID or RAISE(IGNORE) trigger
-
DeliveryDeliver database to target application using R-Tree
-
ExploitINSERT causes node split, last_insert_rowid returns 0
-
ExecutionnodeWrite() hashes freed node as 0
-
ImpactUse-after-free crashes process (denial of service)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK
2 techniques across 2 tactics: Execution, 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 the victim application to be built with the R-Tree extension (SQLITE_ENABLE_RTREE) and to open/process an attacker-supplied SQLite database whose %_node shadow table has been corrupted - specifically declared WITHOUT ROWID, or given a BEFORE INSERT trigger that calls RAISE(IGNORE) - so that sqlite3_last_insert_rowid() returns 0 after an INSERT. The crash only occurs once the application performs INSERTs large enough to cause an R-Tree node split, making nodeWrite() hash the node with iNode==0. Limiting factors: this is a local vector (AV:L) requiring delivery of a malicious database and application processing of it (UI:P); it does not apply to deployments that never load untrusted databases or that are compiled without R-Tree; and impact is confined to a process crash (denial of service), with no confidentiality or integrity effect. |
| Impact | This is a medium-severity, denial-of-service-only issue, not a high-priority emergency. The CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P, score 6.8) tells a consistent story: exploitation is local and requires passive user interaction - the victim application must open and process an attacker-supplied SQLite database - and the only impact is availability (VA:H), with no confidentiality or integrity impact (VC:N/VI:N). Despite the CWE-416 use-after-free classification, the supplied evidence (description, commit message, and test case) shows the observed outcome is a process crash after R-Tree node splits, not code execution; the sources do not demonstrate the UAF being steered toward RCE. The vuln.today decision label is 'this_month' rather than act_now/emergency, consistent with a moderate-urgency fix. No CISA KEV listing is present, so there is no confirmation of active exploitation, and no EPSS score was supplied, so exploitation probability cannot be quantified from this data. A public PoC reference exists (the AbraxasLabs research write-up and the vendor's own regression test reproducing the crash), but it is not verified as working weaponized exploit code. Net: a real, patchable bug worth addressing on a normal cycle, bounded by the need for an attacker-controlled database, an application compiled with the R-Tree extension, and DoS-only impact - not a widespread drive-by threat. |
| Exploit ScenarioDerived | An attacker crafts a malicious SQLite database in which the %_node shadow table is redefined (as WITHOUT ROWID, or carrying a BEFORE INSERT RAISE(IGNORE) trigger) so that after a successful INSERT sqlite3_last_insert_rowid() returns 0. A victim application that uses the R-Tree extension opens this database and performs inserts that cause an R-Tree node split, at which point nodeWrite() hashes the node as 0 and the application reuses freed heap memory, crashing the process. A public PoC reference exists (the vendor regression test and the AbraxasLabs research write-up), though it is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Denial of service in SQLite's R-Tree extension before 3.54.0 allows an attacker who supplies a crafted database to crash the application process by manipulating the %_node shadow table so sqlite3_last_insert_rowid() returns 0 and nodeWrite() hashes a node with iNode==0 after an R-Tree node split. This is a local, medium-severity, denial-of-service-only issue that requires the victim application to be built with SQLITE_ENABLE_RTREE and to process the malicious database; it has no confidentiality or integrity impact. No public exploit has been identified at time of analysis.
RemediationAI
Upgrade to SQLite 3.54.0 or later; the vendor-released patch is in commit https://github.com/sqlite/sqlite/commit/d21bd37c7cfc1b85b17a6703555f0926b6236e04 (upstream check-in https://sqlite.org/src/info/6a9e1415659f9e75) and the 3.54.0 release log at https://sqlite.org/releaselog/3_54_0.html. If upgrading is not immediately possible, do not open or process untrusted SQLite databases, and if R-Tree functionality is not required, build SQLite without SQLITE_ENABLE_RTREE; the trade-off is loss of R-Tree virtual-table support, and avoiding untrusted databases reduces but does not eliminate exposure for applications that still enable R-Tree. See https://www.vulncheck.com/advisories/sqlite-before-3.54.0-use-after-free-in-r-tree-nodewrite.
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
SQLite's R-Tree extension is a virtual-table implementation used for spatial indexing. The %_node shadow table stores R-Tree nodes, and during nodeWrite() SQLite inserts nodes into an in-memory hash table keyed by iNode; the hash logic assumes iNode0 means the node is not yet part of the hash table. If an attacker crafts a database where %_node is declared WITHOUT ROWID or has a BEFORE INSERT trigger calling RAISE(IGNORE), an INSERT can leave sqlite3_last_insert_rowid() returning 0, so nodeWrite() hashes the node as iNode 0. After later node splits, the code can operate on freed heap memory, producing a CWE-416 use-after-free and a process crash. The vendor fix in 3.54.0 checks for pNode->iNode0 and returns SQLITE_CORRUPT_VTAB instead of inserting the node into the hash. CPE data identifies sqlite:sqlite, and EUVD lists SQLite 0 <3.54.0 as affected.
Know when Sqlite 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:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Attacker supplies a crafted database processed locally by the victim app (AV:L, UI:R), needs no privileges (PR:N), and impact is a DoS crash only, so C:N/I:N/A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
SQLite before 3.54.0 contains a use-after-free vulnerability in the R-Tree extension that allows attackers to make applications use freed heap memory by manipulating the %_node shadow table. Attackers can supply a database declaring %_node WITHOUT ROWID or with a RAISE(IGNORE) trigger so nodeWrite() hashes nodes as 0, crashing the process after node splits.
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
Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Multiple unspecified vulnerabilities in SQLite before 3.8.10.2, as used in Apple iOS before 9, have unknown impact and a
SQLite3 from 3.6.0 to and including 3.27.2 is vulnerable to heap out-of-bound read in the rtreenode() function when hand
SQLite 1.0.12 through 3.39.x before 3.39.2 sometimes allows an array-bounds overflow if billions of bytes are used in a
The getNodeSize function in ext/rtree/rtree.c in SQLite through 3.19.3, as used in GDAL and other products, mishandles u
Memory corruption in SQLite versions before 3.50.2 allows network-based attackers with low privileges to manipulate aggr
An exploitable use after free vulnerability exists in the window function functionality of Sqlite3 3.26.0. Rated high se
Arbitrary DLL loading in SQLite's sqldiff.exe utility on Windows allows attackers to achieve code execution by abusing t
Memory corruption in SQLite versions before 3.53.2 enables attackers to crash processes, exhaust memory, or potentially
SQLite 3.32.2 has a use-after-free in resetAccumulator in select.c because the parse tree rewrite for window functions i
SQLite through 3.31.1 allows attackers to cause a denial of service (segmentation fault) via a malformed window-function
A segmentation fault can occur in the sqlite3.exe command-line component of SQLite 3.36.0 via the idxGetTableInfo functi
OAuth and SCIM identity confusion in Open WebUI 0.6.41-0.10.x (SQLite-backed deployments only) allows unauthenticated re
EUVD-2026-113789
GHSA-gf9q-68cx-3mq4
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB