Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain ability to submit SQL to the authorizer-protected app
-
ExploitCraft RIGHT/FULL JOIN on a shared USING column of a restricted table
-
ExecutionAuthorizer check skipped for non-first USING terms in lookupName()
-
ImpactRead column values denied by SQLITE_READ restriction
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: 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 a specific non-default stack: (1) the host application must call sqlite3_set_authorizer() and use it to deny SQLITE_READ access to particular columns - SQLite performs no such read restriction by default; (2) the attacker must be able to submit or influence SQL executed against that connection; and (3) the attacker must construct a RIGHT or FULL OUTER JOIN whose USING clause names the restricted column, since the flaw lies in lookupName() invoking the authorizer only for the first joined table's USING column. Limiting factors: impact is confined to reading values of a shared USING column that the authorizer should have denied (confidentiality only, no write or DoS); the vulnerable JOIN syntax requires SQLite 3.39.0+ where RIGHT/FULL JOIN exists; and the attacker needs at least enough privilege to issue SQL (PR:L), so it is not an unauthenticated-by-default flaw. Fixed in SQLite 3.54.0; the vendor remediation is to update. |
| Impact | This is a low-priority issue across every available signal. The vendor CVSS 4.0 base score is 2.0 (Low), with AV:L (local), AT:P (a specific precondition must hold), PR:L (the attacker must already be able to submit SQL), and impact limited to VC:L (minor confidentiality) with no integrity or availability effect. The vuln.today decision label is 'monitor', the weakest urgency tier, and this is consistent with the low CVSS. No CISA KEV listing and no EPSS score were provided in the input, so there is no signal of active or probable exploitation; absence of these is not itself an error but means widespread-exploitation evidence is simply not present. A public technical writeup/PoC reference exists (abraxaslabs research and the VulnCheck advisory), and the vendor commit ships a reproducing test case, so the trigger is well understood - but a reference is not confirmation of active exploitation, and the two signals should not be conflated. The real-world risk is gated hard by preconditions: exploitation only matters for applications that both accept attacker-supplied SQL and use sqlite3_set_authorizer() with SQLITE_READ column restrictions, which is a non-default, relatively uncommon deployment. Net: a genuine authorization-bypass bug, but a low-severity, narrow-scope confidentiality issue rather than an emergency. |
| Exploit ScenarioDerived | An application embeds SQLite and uses sqlite3_set_authorizer() to deny reads of specific sensitive columns, while allowing a user to submit (or influence) SQL queries. The attacker issues a RIGHT or FULL JOIN that references the denied column as a shared USING column; because lookupName() invoked the authorizer only for the first joined table's USING term, the restricted column's values are returned instead of being blocked. A public technical writeup and vendor test case demonstrate the trigger, though the input does not confirm weaponized exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
SQLite before 3.54.0 can disclose column values that an application explicitly denied through sqlite3_set_authorizer() SQLITE_READ restrictions when a RIGHT or FULL JOIN is used with a USING clause naming the restricted column. Only applications that register an authorizer callback and use it to block specific column reads are exposed, and the attacker must be able to submit SQL to that connection; the impact is limited to confidentiality of the shared USING column, with no write or denial-of-service effect. The vendor-released fix is SQLite 3.54.0, and this is a low-priority issue across every available signal; exploit code references exist in the public advisories and research writeup, but active exploitation is not indicated.
RemediationAI
Vendor-released patch: SQLite 3.54.0. Upgrade embedded SQLite to 3.54.0 or later, per https://sqlite.org/releaselog/3_54_0.html, since the vendor's remediation is to update; the specific upstream changes are check-ins https://sqlite.org/src/info/bbd69ce274620008 and https://sqlite.org/src/info/2cb22877683680c1 (GitHub commits 7ff247c5b9ead3ad8a69c26d3fd264878e127237 and 5694c3bb2a6a40770ecd2f65910eea756734dfd8), which make lookupName() invoke the authorizer for every USING-clause term of a RIGHT JOIN and add auth-9.x regression tests. Applications that cannot update immediately can avoid exposing column restrictions through shared USING columns, for example by rewriting affected queries to use explicit ON conditions and fully-qualified column references so each column read is authorized individually, at the cost of query rewrites; disabling RIGHT and FULL JOIN support at build time (SQLITE_OMIT_RIGHT_JOIN) removes the vulnerable code path but breaks any legitimate use of outer joins. Neither workaround substitutes for the 3.54.0 update, and the underlying exposure requires the host application to rely on sqlite3_set_authorizer() for column-level read control.
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 sqlite3_set_authorizer() interface lets a host application veto individual SQL actions, including SQLITE_READ on named columns, which is a common building block for application-level row/column sandboxing. During name resolution in resolve.c, lookupName() handles a USING clause by calling sqlite3AuthRead() for the joined column, but in vulnerable builds the RIGHT/FULL JOIN path invoked the authorizer only for the first table's USING expression and then took a branch that skipped the read check for the remaining matched expressions. The correction replaces that single-expression handling with a loop over every pFJMatch->nExpr entry, invoking sqlite3AuthRead() for each, and adds regression coverage in test/auth.test (auth-9.x) that asserts SQLITE_READ is raised for both t1.x and t2.x in a FULL JOIN USING(x). The root cause class is CWE-863, incorrect authorization, since the authorization callback is invoked incompletely rather than a memory-safety defect; the prerequisite RIGHT/FULL OUTER JOIN support exists only from SQLite 3.39.0 onward, and no authorizer-based read restriction is applied by default.
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:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Attacker must already be able to submit SQL against an app that configures the authorizer (PR:L, AT/AC reflects the required config), it is a local library (AV:L), and impact is a limited confidentiality read only (C:L, I:N, A:N).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
SQLite before 3.54.0 contains an authorization bypass vulnerability in lookupName() that invokes the authorizer only for the first joined table's USING column. Attackers able to submit SQL can query a shared USING column in a RIGHT or FULL JOIN to read columns denied via sqlite3_set_authorizer() SQLITE_READ restrictions.
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
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-113788
GHSA-qqg5-vxjp-68gf
NVD
CVE.org
EPSS
Exploit-DB