Skip to main content

SQLite EUVDEUVD-2026-113782

| CVE-2026-119371 MEDIUM
Uncontrolled Recursion (CWE-674)
2026-10-30 VulnCheck GHSA-v8vq-8vgf-h9mg
6.8
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply untrusted SQL or crafted database file
  2. Exploit
    Chain tens of thousands of nested CTEs
  3. Execution
    Trigger unbounded selectExpander() recursion
  4. Impact
    Exhaust stack and crash process

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
Exploitation Conditions

Exploitation requires the SQLite process to parse attacker-controlled SQL containing a WITH clause that chains tens of thousands of CTEs, OR to open an untrusted SQLite database file containing a view with that nesting. The root condition is that, before 3.54.0, common table expressions were not counted against SQLITE_LIMIT_EXPR_DEPTH, so that configured nesting limit provides no protection. Limiting factors that reduce realistic risk: the attack is local (the malicious input must be delivered to the SQLite process, not sent over a network to default installs), it requires passive user interaction in the sense that the victim application must accept and process the untrusted SQL text or database file, and impact is confined to a process crash (availability only) with no code execution or data exposure. Deployments that only ever execute trusted, application-authored SQL and never open untrusted database files are not exposed.

Impact

This is a medium-severity denial-of-service issue, not a priority emergency. The supplied CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H, score 6.8) tells a consistent story: the only impact is availability (VA:H) - a process crash via stack exhaustion (CWE-674) - with no confidentiality or integrity effect, and the attack vector is local, meaning the malicious SQL or database file must be fed to the SQLite process rather than reaching it unauthenticated over a network. The vuln.today decision label is 'this_month', which signals a scheduled-patch priority rather than act_now/emergency. No CISA KEV listing and no EPSS score are present in the input, so there is no signal of active or probable exploitation. A public PoC reference exists (the abraxaslabs research write-up and the VulnCheck advisory), but it is not verified as working exploit code, so POC availability must not be read as active exploitation. The practical risk is concentrated entirely in applications that parse untrusted SQL text or open untrusted SQLite database files; where SQLite only ever handles trusted, developer-authored queries, real-world risk is low despite SQLite's enormous deployment footprint. Note the signal tension: PR:N implies no privileges, yet the vector is local with passive user interaction (UI:P), so 'unauthenticated' should be understood as 'no authentication step in the trigger path' rather than 'remotely reachable by anyone.'

Exploit ScenarioDerived

An application lets users upload or open SQLite database files, or exposes a SQL query interface that accepts arbitrary statements. An attacker submits a WITH clause chaining tens of thousands of common table expressions (or ships a view containing such nesting inside a crafted database file); when SQLite expands it, selectExpander() recurses without bound and exhausts the stack, crashing the process. A public PoC reference exists but is not verified as working exploit code.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Stack exhaustion in SQLite before 3.54.0 lets an unauthenticated local attacker crash a process that parses attacker-supplied SQL - or that opens an untrusted database file containing a crafted view - by submitting a WITH clause that chains tens of thousands of common table expressions and drives unbounded recursion in selectExpander(). The vector is local (AV:L) with passive user interaction required (UI:P / UI:R), meaning the victim application must accept and process the malicious SQL text or database file, and impact is confined to a process crash (A:H) with no code execution, data disclosure or integrity loss. No confirmed public exploit code has been identified at time of analysis, though a third-party research write-up on SQLite CTE nesting is referenced; the vendor has released SQLite 3.54.0, which now counts CTE expansion against SQLITE_LIMIT_EXPR_DEPTH.

RemediationAI

Vendor-released patch: upgrade to SQLite 3.54.0 or later, which counts CTE expansion against SQLITE_LIMIT_EXPR_DEPTH (upstream commit https://github.com/sqlite/sqlite/commit/e6ff280c839fdfc7418fd5add12e8f32702a17fb, check-in https://sqlite.org/src/info/f54730871303e655, release notes https://sqlite.org/releaselog/3_54_0.html); embedding applications must rebuild against the 3.54.0 amalgamation rather than rely on an OS-packaged copy. Lowering SQLITE_LIMIT_EXPR_DEPTH is not an effective workaround on affected builds, because pre-3.54.0 CTE expansion was never counted against that limit - the very gap the fix closes - so the only reliable control before patching is to stop feeding untrusted input to the SQLite parser: refuse to execute SQL text supplied by users or external systems and refuse to open/attach database files of unknown provenance, at the cost of breaking legitimate use cases that depend on user-authored queries or imported database files. After upgrading, confirm SQLITE_MAX_EXPR_DEPTH is not configured to 0, since builds that disable the compile-time maximum compile the new checkSubqueryNestingDepth() guard out entirely.

Affected VersionsENISA

SQLite 0 <3.54.0

Affected Packages

euvd sqlite fix: 3.54.0

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 implements common table expressions (CTEs, the WITH clause) by expanding each CTE reference during name resolution: resolveFromTermToCte() in src/select.c walks the chain of CTE references and selectExpander() recursively expands the underlying SELECT trees. Before 3.54.0 this expansion was not counted against SQLITE_LIMIT_EXPR_DEPTH - the existing depth check lived only in sqlite3ResultSetOfSelect() and so covered nested views and subqueries, but not CTE resolution - leaving the configured nesting limit unable to constrain a long WITH chain. A crafted statement (or a view stored in an untrusted database file) with tens of thousands of chained CTEs therefore recurses without bound until the C stack is exhausted and the process aborts, a CWE-674 (Uncontrolled Recursion) condition. The upstream fix e6ff280c839fdfc7418fd5add12e8f32702a17fb (check-in f54730871303e655, release 3.54.0) refactors the old subquery check into checkSubqueryNestingDepth(), increments pParse->nNestSel around CTE resolution in resolveFromTermToCte() (decrementing on exit with an assert that it stays non-negative), and raises "VIEWs and/or subqueries nested too deep" once nNestSel reaches db->aLimit[SQLITE_LIMIT_EXPR_DEPTH]. The accompanying test/with2.test cases 14.1 and 14.2 demonstrate the boundary: an 11-CTE chain succeeds with the limit set to 12 and errors with the limit set to 11. Note that the whole depth check is compiled only when SQLITE_MAX_EXPR_DEPTH>0, so builds that disable the compile-time maximum retain no depth enforcement.

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

Vendor (VulnCheck) PRIMARY 6.8 MEDIUM
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
vuln.today AI 5.5 MEDIUM

Local because the malicious SQL or database file must be fed to the SQLite process, no privileges are needed but the victim must process untrusted input (UI:R), and the only impact is a process crash (A:H, C/I:N).

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

SQLite before 3.54.0 contains a stack exhaustion vulnerability that allows attackers to bypass the SQLITE_LIMIT_EXPR_DEPTH nesting limit because common table expressions are not counted against it. Attackers can supply a WITH clause chaining tens of thousands of CTEs, via plain SQL or a view in an untrusted database file, causing unbounded selectExpander() recursion that crashes the process.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Ubiquitous
embedded database shipped in browsers, mobile OSes, and countless applications
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment MSRC GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Sqlite

View all
CVE-2015-5895 CRITICAL POC
10.0 Sep 18

Multiple unspecified vulnerabilities in SQLite before 3.8.10.2, as used in Apple iOS before 9, have unknown impact and a

CVE-2019-8457 CRITICAL
9.8 May 30

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

CVE-2022-35737 HIGH POC
7.5 Aug 03

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

CVE-2017-10989 CRITICAL
9.8 Jul 07

The getNodeSize function in ext/rtree/rtree.c in SQLite through 3.19.3, as used in GDAL and other products, mishandles u

CVE-2025-6965 HIGH POC
7.2 Jul 15

Memory corruption in SQLite versions before 3.50.2 allows network-based attackers with low privileges to manipulate aggr

CVE-2019-5018 HIGH POC
8.1 May 10

An exploitable use after free vulnerability exists in the window function functionality of Sqlite3 3.26.0. Rated high se

CVE-2025-71316 CRITICAL POC
9.2 Jun 04

Arbitrary DLL loading in SQLite's sqldiff.exe utility on Windows allows attackers to achieve code execution by abusing t

CVE-2026-11822 MEDIUM POC
6.8 Jun 09

Memory corruption in SQLite versions before 3.53.2 enables attackers to crash processes, exhaust memory, or potentially

CVE-2020-13871 HIGH POC
7.5 Jun 06

SQLite 3.32.2 has a use-after-free in resetAccumulator in select.c because the parse tree rewrite for window functions i

CVE-2020-11655 HIGH POC
7.5 Apr 09

SQLite through 3.31.1 allows attackers to cause a denial of service (segmentation fault) via a malformed window-function

CVE-2021-36690 HIGH POC
7.5 Aug 24

A segmentation fault can occur in the sqlite3.exe command-line component of SQLite 3.36.0 via the idxGetTableInfo functi

CVE-2026-87016 HIGH POC
8.1 Sep 09

OAuth and SCIM identity confusion in Open WebUI 0.6.41-0.10.x (SQLite-backed deployments only) allows unauthenticated re

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy