Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as DB user able to create tables
-
DeliveryCreate OID-less table with int4 serial and quote-laced column name
-
ExploitApplication opens updatable cursor over table
-
ExecutionDriver splices unescaped name into positioned SQL
-
PersistInjected WHERE clause alters affected rows
-
ImpactUnauthorized data read/modify/delete
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires all of: an application using psqlODBC before 18.00.0006 that opens an UPDATABLE cursor; the target table has NO OIDs and has an auto-increment int4 column that the driver uses as the row identifier; and that column's name, as reported by the server, contains a double-quote character (the driver fails to double embedded quotes when wrapping the name). The attacker must be authenticated as a database user with privileges to CREATE a table the application subsequently reads with such a cursor, OR be a server that is not trusted under the client's current SSL settings. Limiting factors: exploitation is confined to these cursor/table conditions and to the application's own database privileges (scope unchanged), and it depends on the application actually performing positioned SELECT/UPDATE/DELETE operations - not merely connecting. The only complete fix stated by the vendor is upgrading to psqlODBC 18.00.0006 or later. |
| Impact | This is a genuine but conditional SQL injection (CWE-89) in psqlODBC, not a drive-by critical. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H = 7.1 High) is internally consistent with the description: network-reachable (AV:N) but gated by high attack complexity (AC:H, the chain of preconditions - updatable cursor over an OID-less table with an auto-increment int4 column), low privilege (PR:L, the attacker must be a database user able to CREATE a table the application later reads, or a server untrusted under current SSL settings), and required user/application interaction (UI:R, the application must actually run the positioned SELECT/UPDATE/DELETE). No EPSS score, no CISA KEV entry, and no proof-of-concept or exploit reference were supplied - the sole reference is the vendor security advisory (GHSA-9cg8-r57h-h6jj) - so there is no public exploit identified at time of analysis and no quantitative exploitation probability to weigh. The vuln.today decision label is 'this_week', indicating elevated-but-not-emergency priority, which aligns with the signals: high impact once triggered, but meaningful preconditions and no evidence of active exploitation. Realistically this is a privilege-boundary / untrusted-input issue most relevant where untrusted users can create tables or where SSL trust is weak, rather than a mass-exploitable internet-facing flaw. |
| Exploit ScenarioDerived | A low-privileged database user creates a table (no OIDs, with an auto-increment int4 column) whose column name embeds an unescaped double quote, then waits for or induces an application to open an updatable cursor over it; psqlODBC splices the malicious name into its keyset and positioned SELECT/UPDATE/DELETE statements, altering the SQL that runs with the application's privileges and changing which rows an UPDATE or DELETE touches. Alternatively, a server not trusted under the client's current SSL settings supplies the crafted column name. No public exploit is identified at time of analysis, and the high attack complexity reflects the specific cursor/table conditions that must line up. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 02, 2026
SQL injection in psqlODBC before 18.00.0006 can let an authenticated database user who can create a table that an application reads with an updatable cursor manipulate the driver's keyset and positioned SQL, including which rows a positioned UPDATE or DELETE affects. The flaw triggers when the table lacks OIDs, uses an auto-increment int4 column as the row identifier, and that column's server-reported name contains a double quote that the driver fails to escape. No public exploit identified at time of analysis; exploitation is conditional on the application using updatable cursors and performing positioned operations, and requires user interaction per the CVSS vector.
RemediationAI
Vendor-released patch: psqlODBC 18.00.0006 or later. The vendor states upgrading is the only complete fix. See https://github.com/postgresql-interfaces/psqlodbc/security/advisories/GHSA-9cg8-r57h-h6jj.
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
psqlODBC is the PostgreSQL ODBC driver. For an updatable cursor over a table without OIDs that has an auto-increment int4 column, the driver uses that column to identify rows. It places the server-reported column name between double quotes in keyset queries and in the WHERE clause of positioned SELECT, UPDATE, and DELETE statements, but does not double embedded double quotes. This is a CWE-89 SQL injection class flaw: a column name containing a double quote changes the SQL the driver runs with the application's privileges, including which rows a positioned UPDATE or DELETE affects. Any database user who can create a table the application reads with an updatable cursor can choose such a name, and so can a server not trusted under current SSL settings. The CPE cpe:2.3:a:postgresql:psqlodbc:*:*:*:*:*:*:*:* covers affected versions before 18.00.0006.
Know when Psqlodbc 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:H/PR:L/UI:R/S:U/C:H/I:H/A:H
Network-reachable but gated by multiple table/cursor preconditions (AC:H); attacker needs table-creation privilege (PR:L) and the app must run the cursor (UI:R); injected SQL runs with app rights giving full C/I/A.
Primary rating from Vendor (PostgreSQL).
CVSS VectorVendor: PostgreSQL
Lifecycle Timeline
2DescriptionCVE.org
For an updatable cursor over a table without OIDs that has an auto-increment int4 column, psqlODBC uses that column to identify rows. It places the column's name, as reported by the server, between double quotes in its keyset queries and in the WHERE clause of its positioned SELECT, UPDATE, and DELETE statements, without doubling any double quote in the name. A column name that contains a double quote therefore changes the SQL that the driver runs with the application's privileges, including which rows a positioned UPDATE or DELETE affects. Any database user who can create a table that the application reads with an updatable cursor can choose such a name, and so can a server not trusted under current SSL settings. Versions before psqlODBC 18.00.0006 are affected.
Executive ViewAI
CVE-2026-120065 is a high-severity SQL injection flaw in psqlODBC (versions before 18.00.0006) that could allow an authenticated database user to manipulate row-level UPDATE or DELETE operations when specific conditions align. While no public exploit has been identified, the vulnerability requires user interaction and a narrow configuration, making immediate patching and deployment of interim mitigations essential to protect data integrity.
No vendor-released patch identified at time of analysis; apply interim mitigations such as restricting database user privileges, disabling application use of updatable cursors where feasible, and modifying table schemas to avoid the vulnerable conditions.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Out-of-bounds reads and writes in psqlODBC before 18.00.0006 arise when a host application forwards untrusted column num
SQL injection in psqlODBC before 18.00.0006 allows an attacker who can influence a table or schema name passed by a host
A stack-based buffer overflow (CWE-121) in the psqlODBC driver, the official PostgreSQL ODBC driver, lets attacker-influ
Heap out-of-bounds write in the psqlODBC driver (CWE-787) affects all versions before 18.00.0006 and is reachable only w
A heap buffer overflow in psqlODBC's large-object read path lets a malicious or man-in-the-middle PostgreSQL server over
Format-string handling in psqlODBC before 18.00.0006 can crash applications or disclose client memory when an updatable
Heap memory corruption in psqlODBC versions before 18.00.0005 can be triggered when an application binds 32,769 or more
A stack-based buffer overflow in psqlODBC, the PostgreSQL ODBC driver, affects all releases before 18.00.0006 when updat
Stack buffer over-write in psqlODBC before 18.00.0006 can corrupt an application process that forwards attacker-influenc
Client-side crash and limited out-of-bounds read affect psqlODBC before 18.00.0006 when the driver connects to a Postgre
psqlODBC before 18.00.0006 on Unix-like systems can expose query text and data to other local users when logging is enab
EUVD-2026-115378
NVD
CVE.org
GitHub
Exploit-DB